更新
Express 提供了一个帮助函数,以使生活更轻松。
app.get('/download', function(req, res){
const file = `${__dirname}/upload-folder/dramaticpenguin.MOV`;
res.download(file);
});
旧回答
就您的浏览器而言,该文件的名称只是“download”,因此您需要使用另一个HTTP标题来提供更多信息。
res.setHeader('Content-disposition', 'attachment
你可能还希望发送这样的MIME类型:
res.setHeader('Content-type', 'video/quicktime');
如果您想要更深入的了解,这里是更详细的内容。
var path = require('path');
var mime = require('mime');
var fs = require('fs');
app.get('/download', function(req, res){
var file = __dirname + '/upload-folder/dramaticpenguin.MOV';
var filename = path.basename(file);
var mimetype = mime.getType(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
});
您可以自定义标头的值。在此示例中,我正在使用一个mime-type库-node-mime,以检查文件的mime-type。
另一个需要注意的重要事项是,我已更改您的代码以使用readStream。这是更好的方法,因为不建议使用任何名称中带有“Sync”的方法,因为Node应该是异步的。