Как стать автором
Обновить

Комментарии 6

BTW, если вам необходимо послать файл с сервера клиенту (download) и вы испльзуете Java + Spring, то можно использовать ContentDisposition класс — чуть подробнее на stackoverflow

Я использую Kotlin без Spring, но это не мешает взять этот класс из состава Spring и использовать в своем проекте. В принципе можно даже в либу вынести.

Спасибо за наводку.

Я работаю со спрингом, но не знал о наличии этого класса. К сожалению, они добавили его только в Spring 5. Далеко не весь enterprise успел перейти на него.
Если вам надо отдать файл с именем в utf-8 — то самое лучшее решение это не указывать имя в заголовках, а сделать URL, оканчивающийся именем (не забудьте про экранирование):

/download/1234/Название%20на%20русском.pdf

Это работало даже в IE6 (которому > 15 лет).

Возможность указывать utf-8 в заголовках появилась не очень давно и старые браузеры это не поймут. Впрочем, если указывать для них fallback-вариант латинницей, это тоже работающий вариант.
Спасибо за дополнение.

Да, вы правы. Это рабочий вариант и он определенно достоин упоминания.

Из минусов стоит отметить, что далеко не всегда удобно использовать имя файла в запросе, поскольку:

— Клиентское приложение может и не знать имя файла до его запроса. Имя файла может быть не нужно на фронте и будет необходимость дополнительно попросить REST рассчитать имя файла.

— Работать с токеном / id в ресте удобней, чем с именем файла. И валидация, и поиск, и security проще.
— Клиентское приложение может и не знать имя файла до его запроса. Имя файла может быть не нужно на фронте и будет необходимость дополнительно попросить REST рассчитать имя файла.
— Работать с токеном / id в ресте удобней, чем с именем файла. И валидация, и поиск, и security проще.
301/302 вас спасёт
Зарегистрируйтесь на Хабре, чтобы оставить комментарий