快速服务器文件下载,文件名中带有逗号(“,”)

时间:2019-09-24 11:45:46

标签: express encoding

我有一个可以下载文件的快递服务器。控制器如下所示:

export const downloadFile = async (req, res, next) => {
  // ... get path and filename from req

  const fileStream = fs.createReadStream(path);

  const filenameUriEncoded = encodeURI(filename);

  res.setHeader('Content-disposition', `attachment; filename*=UTF-8''${filenameUriEncoded}; filename=${filenameUriEncoded}`);
  res.setHeader('Content-type', 'application/pdf');
  res.setHeader('Content-length', size);

  fileStream.pipe(res);
}

这很好用,但是当filename包含逗号(“,”)时,Chrome无法下载文件(显示错误),而其他浏览器(FireFox和Safari)下载得很好。

例如,文件名Colors - blue, green.pdf编码为Colors%20-%20blue,%20green.pdf,因此逗号根本没有编码。

我的问题:

  • Chrome无法处理此问题而其他浏览器无法处理的原因是什么?
  • 还有其他字符会引起类似的问题吗?

1 个答案:

答案 0 :(得分:0)

如果您也想对逗号进行编码,则需要使用encodeURIComponent

const filenameUriEncoded = encodeURI(filename);

根据Chrome浏览器无法下载逗号分隔的文件-this是一个已知问题。