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