假设您按照node-zip文档中的示例在内存中创建了一个zip文件:
var zip = new require('node-zip')()
zip.file('test.file', 'hello there')
var data = zip.generate({type:'string'})然后,如何将data发送到浏览器,使其能够接受它作为下载?
我尝试过这样做,但是下载挂起150/150个字节,使Chrome开始消耗100%的CPU:
res.setHeader('Content-type: application/zip')
res.setHeader('Content-disposition', 'attachment; filename=Zippy.zip');
res.send(data),那么向浏览器发送压缩数据的正确方法是什么呢?
发布于 2013-07-13 19:26:53
var archiver = require('archiver')
var fs = require('fs')
var StringStream = require('string-stream')
http.createServer(function(request, response) {
var dl = archiver('zip')
dl.pipe(response)
dl.append(new fs.createReadStream('/path/to/some/file.txt'), {name:'YoDog/SubFolder/static.txt'})
dl.append(new StringStream("Ooh dynamic stuff!"), {name:'YoDog/dynamic.txt'})
dl.finalize(function (err) {
if (err) res.send(500)
})
}).listen(3000)发布于 2013-07-13 08:25:50
我建议您在这种方法中使用流。
var fs = require('fs');
var zlib = require('zlib');
var http = require('http');
http.createServer(function(request, response) {
response.writeHead(200, { 'Content-Type': 'application/octet-stream' });
var readStream = fs.createReadStream('test.file');
var unzipStream = zlib.createUnzip();
readStream.pipe(unzipStream.pipe(response));
}).listen(3000);这在现实世界中是行不通的(因为我在zlib中不常见),但它可能会给您指明方向。
https://stackoverflow.com/questions/17628346
复制相似问题