PtD*_*tDf 6 javascript zip post node.js
我正在尝试创建然后将 zip 文件发送到客户端。我知道如何创建它,但我在将它发送给客户时遇到了问题。我尝试了很多方法。我正在从客户端发送 POST 请求,作为响应,我想发送一个文件。这是我的服务器站点示例代码
var Zip = require('node-zip');
router.post('/generator', function(req, res, next) {
var zip = new Zip;
zip.file('hello.txt', 'Hello, World!');
var options = {base64: false, compression:'DEFLATE'};
fs.writeFile('test1.zip', zip.generate(options), 'binary', function (error) {
console.log('wrote test1.zip', error);
});
res.setHeader('Content-disposition', 'attachment; filename=test1.zip');
res.download('test1.zip');
}
Run Code Online (Sandbox Code Playgroud)
}); 我也尝试过这样的事情:
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下库:
节点-zip
档案员
谁能解释我该怎么做?
该模块也可以正常工作:https ://www.npmjs.com/package/adm-zip
不在服务器中创建临时 zip 文件的示例:
var AdmZip = require('adm-zip');
router.get('/zipFilesAndSend', function(req, res) {
var zip = new AdmZip();
// add local file
zip.addLocalFile("./uploads/29/0046.xml");
// get everything as a buffer
var zipFileContents = zip.toBuffer();
const fileName = 'uploads.zip';
const fileType = 'application/zip';
res.writeHead(200, {
'Content-Disposition': `attachment; filename="${fileName}"`,
'Content-Type': fileType,
})
return res.end(zipFileContents);
});
Run Code Online (Sandbox Code Playgroud)
我之前没有使用过node-zip或archiver(我通常只使用内置的zlib模块),但我立即注意到的一件事是你应该res.download将writeFile. 这样,只有在文件完全写入磁盘后,它才会发送文件。
fs.writeFile('test1.zip', zip.generate(options), 'binary', function (error) {
res.download('test1.zip');
});
Run Code Online (Sandbox Code Playgroud)
我希望这个解决方案对您有用,如果不方便发表评论。
另外,我认为res.download为您设置 Content-disposition 标头,您不需要手动设置它。但并不能 100% 确定这一点。
| 归档时间: |
|
| 查看次数: |
17550 次 |
| 最近记录: |