2013-08-20 100 views
4

我在NodeJS服務器中使用express模塊​​生成zip文件。快速服務器響應許多請求,所以我知道設置正確,但我在生成zip文件並將其作爲可下載文件發回時遇到問題。用ExpressJS發送生成的zip文件

我不想保存文件,然後告訴Express將該文件作爲下載文件發送,我只想將zip文件作爲內存中的數據發送。這是我到目前爲止。

function buildZipFile(data, filename) { 
    var zip = new require('node-zip')(); 
    zip.file(filename, data, { base64: false }); 
    return zip.generate(); 
} 

var data = buildZipFile('hello world', 'hello.txt'); 
res.set('Content-Type', 'application/zip') 
res.set('Content-Disposition', 'attachment; filename=file.zip'); 
res.set('Content-Length', data.length); 
res.end(data, 'binary'); 
return; 

該文件將返回,但windows解壓縮或7zip都不能打開存檔,就好像它已損壞。有什麼建議麼?先謝謝你。

回答

8

您需要將您的選項傳遞給zip.generate而不是zip.file。這將創建一個zip存檔,我可以通過zipinfo/unzip正確檢查/解壓縮。

var fs = require('fs'); 
var Zip = require('node-zip'); 
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); 
}); 
+0

我可以做到這一點,而不保存到硬盤? –

+0

是的,'zip.generate'爲您提供內存數據。從那裏你可以決定將它作爲HTTP響應主體或你喜歡的任何地方進行流式傳輸。 –

相關問題