Node.js 发送由节点zip创建的zip
假设您按照Node.js 发送由节点zip创建的zip,node.js,jszip,Node.js,Jszip,假设您按照节点zip文档中的示例在内存中创建一个zip文件: var zip = new require('node-zip')() zip.file('test.file', 'hello there') var data = zip.generate({type:'string'}) 然后如何将数据发送到浏览器,使其接受下载 我尝试过这个,但下载挂起在150/150字节,使Chrome开始消耗100%的CPU: res.setHeader('Content-type: applicatio
节点zip
文档中的示例在内存中创建一个zip文件:
var zip = new require('node-zip')()
zip.file('test.file', 'hello there')
var data = zip.generate({type:'string'})
然后如何将数据
发送到浏览器,使其接受下载
我尝试过这个,但下载挂起在150/150字节,使Chrome开始消耗100%的CPU:
res.setHeader('Content-type: application/zip')
res.setHeader('Content-disposition', 'attachment; filename=Zippy.zip');
res.send(data)
那么,向浏览器发送zip数据的正确方法是什么呢?我建议您使用streams进行此方法
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中并不常见),但它可以为您提供使用和软件包的方向:
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)
谢谢你的开始,博多凯瑟!Zlib没有削减它,因为我需要多个文件支持,但不管怎样,这帮助很大。我马上发布完整的解决方案。