Как сделать чтобы файл не скачивался а открывался в браузере

Обновлено: 02.07.2024

Есть ли способ принудительно открыть PDF-файлы в браузере, если опция «Отображать PDF в браузере» не отмечена?

Я попытался использовать тег embed и iframe, но он работает только тогда, когда эта опция отмечена.

Что я могу сделать?

Чтобы файл был загружен, а не просмотрен:

Кавычки вокруг имени файла требуются, если имя файла содержит специальные символы, например, filename[1].pdf которые могут нарушить способность браузера обрабатывать ответ.

Для принудительной загрузки я использую Content-Type: application / octet-stream. @ PapickG.Taboada, но тогда система пользователя может не знать тип файла. Например, некоторые пользователи, возможно, выбрали «Всегда открывать файлы этого типа» для файлов PDF. Возможно, если вы хотите переопределить пользовательские предпочтения, тогда можно использовать octet-stream, но указание правильного типа и предлагаемого имени файла - это «правильный» способ обеспечить загрузку. Привет @ColinM Я немного запутался здесь . у нас проблемы с рендерингом PDF, он просто дает зашифрованный текст. где мы устанавливаем Content-Type: application / pdf Content-Disposition: встроенный; "filename.pdf"? потому что мы загружаем его, используя код angular-js. Итак, мой вопрос: должен ли тип контента быть установлен перед загрузкой? А также, мы получаем только ссылку от бэкэнд-команды, URL, который дает путь к файлу, который мы открываем в новой вкладке, используя: window.open (url, '_blank'). Focus (); @ColinM Спасибо, приятель, ты правильно сказал, что проблема, когда мы отлаживали, была связана с типом mime при загрузке файлов. Это должно сделать внутренняя команда. Я пытался получить коды о том, как добавить заголовки в сценарии Java, но не удалось. Спасибо, поскольку я получил реальную идею очищен от вас . :)

Если вы используете HTML5 (и я думаю, что в настоящее время все используют это), есть атрибут с именем download .

Здесь filename необязательно, но если он указан, он будет использовать это имя для загруженного файла.

Если у вас есть контроль над кодом сервера, вы должны использовать 'attachchement', поскольку это позволит использовать тот же код генерации имени файла. Если у вас нет контроля над сервером, это хорошее решение. Важно отметить, что это не работает между доменами (например, политика одного и того же происхождения мешает). При загрузке из одного домена атрибут загрузки не будет работать, если содержимое хранится в другом домене. CORS может пропустить этот контент (не проверял). Да понял! : \ Я неправильно понял вопрос и ответил. Но многие люди приземляются здесь, находя только противоположность, поэтому не отредактировали / удалили ответ.

Правильный тип application/pdf для PDF, а не application/force-download . Это выглядит как хак для некоторых старых браузеров. Всегда используйте правильный mimetype, если можете.

Если у вас есть контроль над кодом сервера:

  • Принудительная загрузка / приглашение: используйте header("Content-Disposition", "attachment; filename=myfilename.myextension");
  • Браузер пытается открыть его: использовать header("Content-Disposition", "inline; filename=myfilename.myextension");

Нет контроля над кодом сервера:

  • Используйте атрибут загрузки HTML5 . Он использует пользовательское имя файла, указанное на стороне просмотра.

ПРИМЕЧАНИЕ. Я предпочитаю указывать имя файла на стороне сервера, поскольку у вас может быть больше информации и вы можете использовать общий код.

Читайте также: