Загрузка файла с сервера Express с запятой (",") в имени файла - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть экспресс-сервер, на который можно скачивать файлы.Контроллер выглядит следующим образом:

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 голосов
/ 24 сентября 2019

Вам необходимо использовать encodeURIComponent, если вы хотите также закодировать запятую.

const filenameUriEncoded = encodeURI(filename);

В связи с невозможностью Chromes загружать файлы с запятыми - эта является известной проблемой,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...