NodeJS下载文件名发送文件

我尝试使用以下代码将文件发送到客户端:

router.get('/get/myfile', function (req, res, next) { res.sendFile("/other_file_name.dat"); }); 

它工作正常,但我需要当用户从url下载此文件:

 http://mynodejssite.com/get/myfile 

浏览器中的文件名必须是“other_file_name.dat”而不是“myfile”。

有专门的方法res.download

这涵盖了你所有的;)

 router.get('/get/myfile', function (req, res) { res.download("/file_in_filesystem.dat", "name_in_browsers_downloads.dat"); }); 

这是我的解决scheme:

 var fs = require('fs'); var path = require('path'); const transfer = exports; transfer.responseFile = function (basePath, fileName, res) { var fullFileName = path.join(basePath, fileName); fs.exists(fullFileName, function (exist) { if (exist) { var filename = path.basename(fullFileName); res.setHeader('Content-Disposition', 'attachment; filename=' + filename); res.setHeader('Content-Transfer-Encoding', 'binary'); res.setHeader('Content-Type', 'application/octet-stream'); res.sendFile(fullFileName) } else { res.sendStatus(404); } }); }; 

并使用它:

 router.get('/myfile', function (req, res) { transfer.responseFile("/var/nodejs", 'fileToDownload.dat', res); }); 

谢谢所有帮手:)

如果你有多个路由如下:“/ get / myfile1”,“/ get / myfile2”,“/ get / myfile

你为什么不做一个通用的。 它可以处理所有的请求,它也会解决你的链接(download_name)的问题。 你可以这样做,如下所示

 router.get('/get/:fileName',function(req,res){ res.sendFile('/file_path/'+req.params.fileName) }); 

编辑之后编辑(编辑1):

对不起,我没有明白你的意思。 我假设,如果你正在开发后端API,你应该有select的URL的控制权呢?

举个例子:

当服务器端是这样的:

 router.get('/get/:fileName',function(req,res){ res.sendFile('/file_path/'+req.params.fileName) }); 

根据您发布的代码和实施。 需要下载的文件数量和已知文件是有限的。

假设有2个文件:“file1.dat”和“file2.dat”

你可以调用下面的API吗?

  1. http://yourapi.com/get/file1.dat
  2. http://yourapi.com/get/file2.dat

我错过了什么?

编辑2:

如果是这样的话,我认为这会解决你的问题,而不是使用sendFile使用res.attachment:

 app.get('/get/myfile',function(req,res){ res.attachment('/file.txt'); res.end('Downloaded', 'UTF-8') });