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

Express 快速服务器文件下载,文件名中带逗号(“,”),express,encoding,Express,Encoding,我有一个可以下载文件的express服务器。控制器如下所示: export const downloadFile = async (req, res, next) => { // ... get path and filename from req const fileStream = fs.createReadStream(path); const filenameUriEncoded = encodeURI(filename); res.setHeader('Co

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

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);
}
这很好用,但是当
文件名
包含逗号(“,”)时,Chrome无法下载文件(显示错误),而其他浏览器(FireFox和Safari)下载效果良好

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

我的问题是:

  • 为什么Chrome不能处理这个问题,而其他浏览器可以
  • 还有其他角色会导致类似的问题吗

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

const filenameUriEncoded = encodeURI(filename);
据Chromes称,无法下载带有逗号的文件是一个众所周知的问题