使用Koa启动文件下载

Hed*_*dge 6 download node.js koa

我正在使用Koa作为网络服务器来为我的Polymer应用程序提供服务.按下前端的按钮localhost:3000/export被调用.在将一些文件打包到zip-archive之后,我想将文件下载发送到客户端.

在Koa.js中如何做到这一点?

这是一个关于如何在Express中执行此操作的示例(另一个选项是download-helper

app.get('/export', function(req, res){

  var path = require('path');
  var mime = require('mime');

  var file = __dirname + '/upload-folder/dramaticpenguin.MOV';

  var filename = path.basename(file);
  var mimetype = mime.lookup(file);

  res.setHeader('Content-disposition', 'attachment; filename=' + filename);
  res.setHeader('Content-type', mimetype);

  var filestream = fs.createReadStream(file);
  filestream.pipe(res);
});
Run Code Online (Sandbox Code Playgroud)

我正在寻找这样的东西:

router.post('/export', function*(){
  yield download(this, __dirname + '/test.zip')
})
Run Code Online (Sandbox Code Playgroud)

Jam*_*ore 23

您应该能够简单地设置this.body为文件流

this.body = fs.createReadStream(__dirname + '/test.zip');
Run Code Online (Sandbox Code Playgroud)

然后根据需要设置响应标头.

this.set('Content-disposition', 'attachment; filename=' + filename);
this.set('Content-type', mimetype);
Run Code Online (Sandbox Code Playgroud)


saa*_*adq 15

对于将来看到此内容的任何其他人,值得一提的是attachment,response对象上有一个内置方法,可用于设置具有指定文件名的Content-Dispositionto attachment.所以你可以这样做:

this.attachment('hello.txt')
Run Code Online (Sandbox Code Playgroud)

它与以下内容相同:

this.set('Content-disposition', 'attachment; filename=hello.txt')
Run Code Online (Sandbox Code Playgroud)

对于Koa 2:

ctx.attachment('hello.txt')
Run Code Online (Sandbox Code Playgroud)