2015-05-26 103 views
3

我想强制浏览器从外部存储器下载文件,并给定url。 我实现了这个快递控制器后行动:node express content-disposition

var download = function(req, res) { 
    request(req.body.url).on('response', function(response) { 
     res.set({ 
      'Content-Disposition': 'attachment; filename=' + req.body.filename, 
      'Content-Type': response.headers['content-type'] 
     }); 
    }) 
    .pipe(res); 
}; 

我不知道为什么总是浏览器收到“内联”,而不是“附件”,避免我要下载的文件。

在这种情况下,我使用express和request,服务器托管在Heroku上,托管文件的服务器是FilePicker。

+0

FWIW,你的代码会做错误的事情的情况下,文件名中包含空格,某些分隔符,或者非ASCII字符。请参阅RFC 6266。 –

回答

3

我在四处寻找同样的东西。 Express' documentation显示了一个非常简单的辅助方法,正确的开箱即用:

var express = require('express'); 
var app = express(); 

app.get('/download', function(req, res) { 
    res.download('/path/to/your_file.pdf'); 
});