无法使用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,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);
    })
}

从ANGULARJS的成功功能可以看出,我尝试了几件事,但没有任何效果。我尝试使用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,null);
        a.dispatchEvent(e);
    }
}