В прошлом у меня была похожая проблема, и я нашел следующее решение.
Первый 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.Я надеюсь, что это будет работать для вас также для длинных имен файлов.