在节点服务器上,我有此代码。它基本上将浏览器的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端还是在浏览器上
您可以使用名为file-saver
的节点模块,并使用其提供的saveAs
方法并在客户端下载文件。
第一个npm install file-saver
;
您可以将其用作
import {saveAs} from 'file-saver';
并且在then
块内,您需要添加此行
saveAs(new Blob([response]), <your file name>)
它将自动下载您的文件。