下载具有文件名的NodeJS sendFile

Mas*_*cia 8 node.js sendfile

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

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

它的工作正常但我需要用户从网址下载此文件时:

http://mynodejssite.com/get/myfile
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ský 9

有专门的方法res.download

为您覆盖所有;)

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


Mas*_*cia 8

这是我的解决方案:

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);
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

并使用它:

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

谢谢所有助手:)