gpt4 book ai didi

javascript - 使用 Express 从 NodeJS 服务器下载文件

转载 作者:IT老高 更新时间:2023-10-28 13:12:06 29 4
gpt4 key购买 nike

如何将服务器中的文件下载到访问 nodeJS 服务器中页面的机器上?

我正在使用 ExpressJS,我一直在尝试这个:

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

var file = fs.readFileSync(__dirname + '/upload-folder/dramaticpenguin.MOV', 'binary');

res.setHeader('Content-Length', file.length);
res.write(file, 'binary');
res.end();
});

但我无法获取文件名和文件类型(或扩展名)。谁能帮我解决这个问题?

最佳答案

更新

express has a helper让生活更轻松。

app.get('/download', function(req, res){
const file = `${__dirname}/upload-folder/dramaticpenguin.MOV`;
res.download(file); // Set disposition and send it.
});

旧答案

就您的浏览器而言,文件的名称只是“下载”,因此您需要使用另一个 HTTP header 为其提供更多信息。

res.setHeader('Content-disposition', 'attachment; filename=dramaticpenguin.MOV');

您可能还想发送一个 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.lookup(file);

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

var filestream = fs.createReadStream(file);
filestream.pipe(res);
});

您可以将标题值设置为您喜欢的任何值。在这种情况下,我使用的是 mime 类型的库 - node-mime , 检查文件的 mime-type 是什么。

这里要注意的另一件重要事情是,我已将您的代码更改为使用 readStream。这是一种更好的做事方式,因为使用任何名称中带有“Sync”的方法都是不受欢迎的,因为 Node 是异步的。

关于javascript - 使用 Express 从 NodeJS 服务器下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288814/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com