#bug
Open Archiver не дает сохранить файлы с кириллицей
В @телеграмме один из самохостят @hageshii666 выявил и починил баг
Как @hageshii666 используя DeepSeek нашел и устранил проблему
Вот линк на то что мне дипсик выплюнул
DeepSeekВот тут надо редактировать код
/opt/openarchiver/packages/backend/dist/api/controllers/Да, поменял в storage.controller.js и всё заработало как надо
Вот это:
const fileName = path.basename(safePath); res.setHeader('Content-Disposition', `attachment; filename="${fileName}"`); fileStream.pipe(res);Заменил на это:
const fileName = path.basename(safePath); // Кодируем имя файла для безопасного использования в HTTP-заголовках const encodedFileName = encodeURIComponent(fileName) .replace(/['()]/g, escape) .replace(/\*/g, '%2A'); // Устанавливаем два варианта заголовка для совместимости const safeFileName = fileName.replace(/[^\x20-\x7E]/g, '_'); // Только ASCII символы res.setHeader( 'Content-Disposition', `attachment; filename="${safeFileName}"; filename*=UTF-8''${encodedFileName}` ); fileStream.pipe(res);
Я же(еще не видя его ответа) - пошел изучать github open-archiver’a и нашел:
- Ишью OpenArchiver/issues/182
- А внутри ссылку на OpenArchiver/commit
Как решить проблему по примеру issue\commit'а
Где в файле
/opt/openarchiver/packages/backend/dist/api/controllers/storage.controller.jsстрочку
res.setHeader('Content-Disposition', `attachment; filename="${fileName}"`);заменяют на
const encodedFileName = encodeURIComponent(fileName); res.setHeader('Content-Disposition', `attachment; filename*=UTF-8''${encodedFileName}`);Что позволяет исправить проблему с кодировкой в названии скаиваемого файла.
Коммит пока в билд текущей сборки не попал, посему правим ручками и живем счастливо.
Еще раз спасибо @hageshii666 за наводку на баг и починку!
