Веб-приложение Java: добавление заголовка довольного расположения для принуждения поведения “сохранить Как” браузеров

Даже при том, что это не часть веб-приложений HTTP 1.1/RFC2616, которые хотят вынудить ресурс быть загруженным (а не отображенным) в браузере, может использовать Content-Disposition заголовок как это:

Content-Disposition: attachment; filename=FILENAME

Даже жесткий это только определяется в RFC2183 и не части HTTP 1.1, это работает в большинстве веб-браузеров, как требуется.

Таким образом от стороны клиента, все достаточно хорошо.

Однако на серверной стороне, в моем случае, у меня есть веб-приложение Java, и я не знаю, как я, как предполагается, устанавливаю тот заголовок, особенно в следующем случае...

У меня будет файл (скажите названный "bigfile"), размещенный на экземпляре Amazon S3 (мой блок S3 должен быть доступным использованием частичного адреса как: files.mycompany.com/), таким образом, пользователи смогут получить доступ к этому файлу по files.mycompany.com/bigfile.

Теперь есть ли способ обработать сервлет (или .jsp) так, чтобы Content-Disposition заголовок всегда добавляется, когда пользователь хочет загрузить тот файл?

На что был бы похож код и каковы глюки, если таковые имеются?

7
задан SyntaxT3rr0r 8 March 2010 в 23:23
поделиться

2 ответа

У вас не будет URL-адреса, который был бы прямой ссылкой на файл. Вместо этого у вас будет URL-адрес, который ведет к вашему коду сервлета (или к какому-то коду действия в вашей серверной структуре). Это, в свою очередь, должно будет получить доступ к содержимому файла и передать его клиенту после настройки заголовка. (Вы также можете не забыть иметь дело с заголовками элементов управления кешем, если это необходимо.)

Класс HttpServletResponse имеет API, которые позволят вам установить все заголовки, которые вы хотите. Вы должны убедиться, что вы установили заголовки до того, как начнете выгружать содержимое файла, потому что заголовки буквально должны быть первыми в потоке, отправляемом браузеру.

Это не сильно отличается от ситуации, когда у вас может быть сервлет, который генерирует загрузку на лету.

править Я оставлю это здесь для потомков, но отмечу, что есть (или может быть) способ передать некоторые HTTP-заголовки на S3, когда вы сохраняете файл, так что Amazon выплюнет их обратно при раздаче файла. Я не совсем уверен, как вы это сделаете, и я не уверен, что «Content-disposition» - это заголовок, который вы можете настроить таким образом, но я буду продолжать поиски.

2
ответ дан 7 December 2019 в 10:00
поделиться

Поместите файл .htaccess в корневую папку со следующей строкой:

Header set Content-Disposition attachment
0
ответ дан 7 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: