LINUX.ORG.RU

Загрузка файла с русским названием

 ,


1

1

Всем привет
Столкнулся с проблемой в firefox (в остальных браузерах нормально)
В java коде генерируется имя файла

fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
Пользователю отдается файл через primefaces'овский DefaultStreamedContent (но это я думаю значения не имеет)
Во всех браузерах при скачки файлов имя нормально Петров_Петр_Петрович.pdf в firefox
%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D0%9F%D0%B5%D1%82%D1%80_%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%D0%B8%D1%87
В чем проблема?


Имя файла пишется в заголовок Content-Disposition HTTP-ответа. Если в одних браузерах работает, а в других нет, то проблема, как мне кажется, там же, в заголовках. Кодировка, либо MIME-тип application/x-urlencoded

Можете Wireshark'ом поймать свой ответ и показать заголовки?

Adonai ★★★ ()

Проблемное место, браузеры по-разному обрабатывают эту ситуацию. У меня в проекте такой код есть:

    resp.setCharacterEncoding("UTF-8");
    resp.setContentType("application/octet-stream");
    resp.setHeader("Content-Disposition:", String.format("attachment; filename=\"%s\"", MimeUtility.encodeText(fileName, "UTF-8", "B")));


Ещё помню что я по браузерам различал и в зависимости от браузера делал разные заголовки в ответе, но не нашёл этот код.

Если есть возможность - проще отдавать в латиннице имя файла (транслитом например).

Legioner ★★★★★ ()
Последнее исправление: Legioner (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.