在POST Nodejs Express上推送文件下载

问题描述 投票:0回答:1

在节点服务器上,我有此代码。它基本上将浏览器的POST数据发送到api服务器,并以大块数据的形式接收文件,并且相同的数据通过管道响应发送回浏览器。但问题是api响应正确,我可以在本地使用nodejs写入文件,但不会在浏览器中推送下载文件]

router.post('/MyURLOnNODE', function (req, res) {
    var MyJsonData = { some Data        };

    res.writeHead(200, {'Content-disposition': 'attachment; filename=fileArchive.tgz','Content-Type': 'application/force-download'}); 
    try {
         request({
            url: 'SomeAPI Url', //URL to hit
            method: 'POST',
            json: MyJsonData
            }).pipe(res);
    } catch(e) {
        console.log("Pipe error",e);
    }
    console.log("File Streaming Called ",MyJsonData)            
    }
);

客户端代码...这是尝试创建Blob并将其用于urlObject的尝试。但是当我以十六进制格式签入时,下载的文件已损坏。

$http({
    method: 'POST',
    url: 'MyURLOnNODE',
    data: PostData, //forms user object
    headers: {
        'Content-Type': 'application/json'
    }
})
.then(function (data) {
    var response=data.data;       
    var id = Flash.create('success', "Folder Archieved", 5000);
    var a = document.getElementById('arch');
     a.href = URL.createObjectURL(new Blob([response]));
     a.download = "FolderMe.tgz";
     a.type='application/octet-stream '
     a.click(); 
}

那么有什么解决办法吗?在NodeJs端还是在浏览器上

javascript node.js
1个回答
0
投票

您可以使用名为file-saver的节点模块,并使用其提供的saveAs方法并在客户端下载文件。

第一个npm install file-saver;

您可以将其用作

import {saveAs} from 'file-saver';

并且在then块内,您需要添加此行

saveAs(new Blob([response]), <your file name>)

它将自动下载您的文件。

© www.soinside.com 2019 - 2024. All rights reserved.