首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送由节点- zip创建的zip

发送由节点- zip创建的zip
EN

Stack Overflow用户
提问于 2013-07-13 08:18:06
回答 2查看 3.9K关注 0票数 3

假设您按照node-zip文档中的示例在内存中创建了一个zip文件:

代码语言:javascript
复制
var zip = new require('node-zip')()
zip.file('test.file', 'hello there')
var data = zip.generate({type:'string'})

然后,如何将data发送到浏览器,使其能够接受它作为下载?

我尝试过这样做,但是下载挂起150/150个字节,使Chrome开始消耗100%的CPU:

代码语言:javascript
复制
res.setHeader('Content-type: application/zip')
res.setHeader('Content-disposition', 'attachment; filename=Zippy.zip');
res.send(data)

,那么向浏览器发送压缩数据的正确方法是什么呢?

EN

回答 2

Stack Overflow用户

发布于 2013-07-13 19:26:53

使用档案员串流包:

代码语言:javascript
复制
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)
票数 6
EN

Stack Overflow用户

发布于 2013-07-13 08:25:50

我建议您在这种方法中使用流。

代码语言:javascript
复制
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中不常见),但它可能会给您指明方向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17628346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档