在Node.js中设置下载响应的文件名

6

在以下节点响应的get请求中,我如何为我的下载二进制文件设置文件名?目前它会下载文件并将其名称设置为req.url字符串。

.get(function (req, res) {
  var filename = path.join(process.cwd(), '');
  path.exists(filename, function (exists) {
    if (!exists) {
      res.writeHead(404, {
        "Content-Type": "text/plain"
      });
      res.write("File Not found: 404 Not Found\n");
      res.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) {
      filename += '/' + category + '/' + 'undo.png';
    }

    fs.readFile(filename, "binary", function (err, file) {
      if (err) {
        res.writeHead(500, {
          "Content-Type": "binary"
        });
        res.write(err + "\n");
        res.end();
        return;
      }

      res.writeHead(200);
      res.write(file, "binary");
      res.end();
    });
  });
});
1个回答

10
.get(function (req, res) {
  var filename = path.join(process.cwd(), '');
  path.exists(filename, function (exists) {
    if (!exists) {
      res.writeHead(404, {
        "Content-Type": "text/plain"
      });
      res.write("File Not found: 404 Not Found\n");
      res.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) {
      filename += '/' + category + '/' + 'undo.png';
    }

    fs.readFile(filename, "binary", function (err, file) {
      if (err) {
        res.writeHead(500, {
          "Content-Type": "binary"
        });
        res.write(err + "\n");
        res.end();
        return;
      }

      res.writeHead(200, {
        "Content-Disposition": "attachment;filename=" + yourFilename,
        'Content-Type': 'image/png',
        'Content-Length': file.length
      });
      res.write(file);
      res.end();
    });
  });
});

这是否需要在前端进行任何处理,还是只需设置文件名,但目前似乎无法工作,请您详细说明。 - Dagm Fekadu
前端下载链接长什么样子? - user405398
只包含ID,没有好的URL,虽然我有名称,但只想在节点中设置它,因为它是直接下载,所以我希望文件完全符合我的要求。 - Dagm Fekadu
你用我的代码替换了 res.writeHead(200); 吗? - user405398
嘿,谢谢。如果我的类型是像dox、png和pdf这样的文件,我想附加内容类型,那么它会接受你提供的所有内容并附加吗? - Dagm Fekadu
使用 node-mime 来实现此功能。 - user405398

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接