我发现了一些与此相关的问题,但答案对我不起作用,所以在这里发布了相同的问题。
我有一些XML内容,这些内容是通过编程创建的,并显示在Textarea中。我需要一个导出或下载到本地系统的选项。因此,我正在使用POST
请求将这些数据发送到NODE.JS
,在那里我正在创建XML
文件并尝试下载它。我知道如果我使用GET
,它会直接工作,但使用POST
会失败。有什么办法我能做到这一点吗?
这是我的代码:
Angularjs POST请求:点击时我有一个按钮,我将所有XML数据传递给我的NODE.js函数:
$scope.ExportXML = function(XMLContent){
var XMLContent = XMLContent;
$http({
url : "/ExportData",
method : "POST",
data : XMLContent
}).success(function(data, status, headers, config) {
console.log(data);
console.log("Data Exported");
window.location.assign(data);
$window.open(data);
}).error(function(error, status, headers, config) {
console.log('ERROR: could not download file');
console.log(error)
});
}
我的Node.js函数,它将创建带有数据的XML文件:
const fs = require('fs');
const path = require('path');
const reqPath = path.join(__dirname, '../');
exports.exportfile = function(req,res)
{
var ContentData = req.body;
var FileName = "XMLDATA.xml";
fs.appendFile(FileName, ContentData, function (err)
{
const FilePath = reqPath+FileName;
res.download(FilePath);
})
}
正如你从安哥拉队的成功功能中看到的那样,我尝试了几件事,但都没有成功。我尝试使用callback(FilePath);
发回文件的路径,然后尝试使用$window.open(data);
下载文件,但我收到以下错误Not allowed to load local resource:
。
有人能帮我做这个吗?
经过一番搜索,我终于能够做到了。我没有使用POST将数据发送到NODE.JS,而是尝试在AngularjS函数中创建文件,并从那里自己下载。如果有人在这里寻找解决方案,那就是:
//Export the contents of XML to text file
$scope.ExportXML = function(XMLContent){
var filename = 'HelloWorld.xml'
var blob = new Blob([XMLContent], {type: "text/xml"});
if (window.navigator && window.navigator.msSaveOrOpenBlob)
{
window.navigator.msSaveOrOpenBlob(blob, filename);
}
else
{
var e = document.createEvent('MouseEvents'),
a = document.createElement('a');
a.download = filename;
a.href = window.URL.createObjectURL(blob);
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
e.initEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
}
}