无法使用POST请求从Node.js下载文件



我发现了一些与此相关的问题,但答案对我不起作用,所以在这里发布了相同的问题。

我有一些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);
}
}

最新更新