Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 发送由节点zip创建的zip_Node.js_Jszip - Fatal编程技术网

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没有削减它,因为我需要多个文件支持,但不管怎样,这帮助很大。我马上发布完整的解决方案。