Как правильно установить HTTP Content-Disposition для больших имен файлов в Java? - PullRequest
0 голосов
/ 31 августа 2011

Я работаю над некоторыми требованиями, которые приведут к загрузке произвольных файлов PDF с веб-сервера J2EE.Имена могут выглядеть следующим образом:

Xxxxxxxxxxxxxxxxxx - гггггггггг - ааааааааааа - Bbbbbbbb ccc Dddddddddddddd - abc1234560 - 2009-03-26 - 235959.pdf

* 1005прочитайте пару разделов в RFC2183:

http://www.ietf.org/rfc/rfc2183.txt

Например,

Короткое (длина <= 78 символов) значение параметра, содержащее только не- <code>tspecials' characters SHOULD be represented as a single маркер.Короткое значение параметра, содержащее только символы ASCII, но включающее tspecials' characters, SHOULD be represented as quoted-string '.Значения параметров, превышающие 78 символов или содержащие символы, не входящие в ASCII, ДОЛЖНЫ быть закодированы, как указано в [RFC 2184].

и т. Д. И т. Д. Теперь существуют миллионы вещей, которые могут пойти не так, еслиЯ не читаю все эти RFC ... Или я выбираю библиотеку, которая обрабатывает такие спецификации RFC.Есть ли такая вещь для Java?Или я параноик, и на самом деле достаточно просто записать этот заголовок в поток вывода:

String filename = "\"" + filename.replace("\"", "\\\"") + "\"";
addHeader("Content-Disposition", "attachment; filename=" + filename);

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

В прошлом у меня была похожая проблема, и я нашел следующее решение.

Первый URL выглядит как http://myhost.com/file/1234, где 1234 - идентификатор файла.Допустим, имя файла должно быть my-very-long-file-name.pdf.Таким образом, вместо установки HTTP-заголовка перенаправьте вызов на URL-адрес, например

http://myhost.com/download/1234/my-very-long-file-name.pdf

. Сервлет, сопоставленный с /download/, примет идентификатор URL-адреса и напечатает файл в свой выходной поток.Но браузер извлечет имя файла из URL и предложит вам скачать и сохранить файл, потому что его имя находится в URL.Я надеюсь, что это будет работать для вас также для длинных имен файлов.

1 голос
/ 31 августа 2011

RFC 2183 не имеет значения, RFC 6266 - это

Кроме того, ограничение в 78 символов относится только к электронной почте, а не к http, поэтому вам не нужно об этом беспокоиться.

...