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

Unable to download the file from Node.js using the POST request

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

我有一些 XML 内容以编程方式创建并显示在 Textarea 中。我需要一个选项来将其导出或下载到本地系统。因此,我使用 POST 请求将这些数据发送到 NODE.JS,我在其中创建 XML 文件并尝试下载它。我知道如果我使用 GET 它会直接工作但是使用 POST 它会失败。我有办法做到这一点吗?

这是我的代码:

AngularjsPOST请求: 单击时我有一个按钮 我正在将所有 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);
    })
}

正如您从 ANGULARJS 的成功函数中看到的那样,我尝试了一些操作,但 none 成功了。我尝试使用 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);
    }
}