Мне было интересно, как сделать ссылку на файл PDF загружаемой вместо того, чтобы открывать их в браузере? Как это сделать в html? (Я бы предположил, что это сделано через javascript или что-то в этом роде).
javascript
html
404Error
источник
источник
Ответы:
Вы не можете сделать это с помощью HTML. Это серверное решение. Вы должны передать файл в потоковом режиме, чтобы браузер запускал диалог сохранения.
Я бы посоветовал этого не делать. Как пользователь взаимодействует с PDF-файлом, следует оставить на усмотрение пользователя.
ОБНОВЛЕНИЕ (2014 г.):
Итак ... этот ответ все еще получает много отрицательных голосов. Я предполагаю, что частично это связано с тем, что на этот вопрос был дан ответ 4 года назад, и, как указывает Сарим, теперь есть атрибут HTML 5,
download
который может справиться с этим.Я согласен и считаю, что ответ Сарима хорош (вероятно, это должен быть выбранный ответ, если OP когда-либо вернется). Однако этот ответ по-прежнему является надежным способом справиться с этим (как указывает ответ Йигита Йенера, и, как ни странно, люди согласны с этим). Хотя атрибут загрузки получил поддержку, он все еще нестабилен:
http://caniuse.com/#feat=download
источник
http
тег к вопросу. Вместо абзаца 2: «Возможно, вы захотите пересмотреть, отвечает ли предотвращение немедленного просмотра PDF-файлов в интересах всех пользователей. Сказав это ...» Затем предположите, что OP и будущие читатели уже взрослые, и переходите к действенному ответу, например Йенеру .Теперь это возможно с html5. Установите атрибут "загрузка" в элементе.
Источник: http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download
источник
if ("download" in document.createElement("a")){ ... }
Это возможно только при установке заголовка HTTP-ответа кодом на стороне сервера. А именно,
источник
вам нужно будет использовать скрипт PHP (или другой язык на стороне сервера для этого)
и используйте httacces для перенаправления (перезаписи) в файл PHP вместо pdf
источник
http://www.example.com/_PDFs/___download_the_catalogue_instead_opening.php
и пытаюсь открыть файл pdf, он все равно открывает оригинал в браузере, вместо этого загружая переименованную версию ...Ты можешь использовать
Посмотрите этот пример:
http://www.codeproject.com/KB/aspnet/textfile.aspx
Это касается ASP.NET. Я уверен, что вы можете найти аналогичные решения на всех других серверных языках. Однако, насколько мне известно, решения javascript не существует.
источник
Без атрибута html5 этого можно добиться с помощью php:
Создайте файл php с именем download.php с помощью этого кода:
Теперь, если вы хотите автоматически начать загрузку pdf, напишите этот javascript:
Если вы хотите, чтобы это работало по ссылке, используйте это ...
источник
$file = $_GET['$file'];
. Потому что тогда можно было бы также вызватьdownload.php?file=../../../wp-config.php
или любой другой данный ресурс. Дополнительная проверка расширений, MIME-типов и разрешенных путей для загрузки (и удаление таких вещей, как "../") очень важна!<a href='download.php'> ?
Если вы хотите напрямую загрузить любое изображение или файл PDF из браузера, а не открывать его на новой вкладке, тогда в javascript вы должны установить значение для атрибута загрузки для создания динамической ссылки
Для нового обновления Chrome какое-то время событие не работает. для этого будет использоваться следующий код
Добавление дочернего элемента и удаление дочернего элемента полезно только для Firefox, браузера Internet Explorer. На хроме он будет работать без добавления и удаления ребенка
источник
Лучше всего для меня сработало решение, написанное Ником в его блоге.
Основная идея его решения - использовать мод заголовка серверов Apache и отредактировать файл .htaccess, чтобы включить директиву FileMatch, которая заставляет все файлы * .pdf действовать как поток, а не вложение. Хотя на самом деле это не связано с редактированием HTML (согласно исходному вопросу), это не требует никакого программирования как такового.
Первая причина, по которой я предпочел подход Ника, заключается в том, что он позволил мне установить его для каждой папки, чтобы PDF-файлы в одной папке можно было открывать в браузере, а другие (те, которые мы хотели бы, чтобы пользователи редактировали, а затем повторно загружали) быть принудительно загруженными.
Я также хотел бы добавить, что в PDF-файлах есть возможность публиковать / отправлять заполняемые формы через API на ваши серверы, но для ее реализации требуется время.
Вторая причина заключалась в том, что время - это вопрос. Написание обработчика файлов PHP для принудительного размещения содержимого в header () также займет меньше времени, чем API, но все же дольше, чем подход Ника.
Если вы знаете, как включить мод Apache и отредактировать .htaccss, вы сможете получить это примерно за 10 минут. Требуется хостинг Linux (не Windows). Это может быть не подходящим подходом для всех применений, поскольку для настройки требуется доступ к серверу высокого уровня. Таким образом, если вы сказали доступ, это, вероятно, потому, что вы уже знаете, как делать эти две вещи. Если нет, проверьте блог Ника для получения дополнительных инструкций.
источник
Поскольку способ html5 (мой предыдущий ответ) доступен не во всех браузерах, есть еще один способ немного взломать.
Это решение требует, чтобы вы обслуживали предполагаемый файл из того же домена ИЛИ имеете разрешение CORS.
application/octet-stream
. Результат должен выглядеть такdata:application/octet-stream;base64,SGVsbG8sIFdvcmxkIQ%3D%3D
Теперь ставим
location.href = data
. Это заставит браузер загрузить файл. К сожалению, вы не можете установить таким образом имя или расширение файла. Возиться с медиа-типом можно кое-что.См. Подробности: https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs.
источник
Мне нужно было сделать это для файлов, созданных с динамическими именами в определенной папке и обслуживаемых IIS.
Это сработало для меня:
Добавьте новый заголовок со следующей информацией:
Name: content-disposition Value: attachment
(с: http://forums.iis.net/t/1175103.aspx?add+CustomHeaders+only+for+ sure+file+types+ )
источник
Если вы используете HTML5 (а сейчас, думаю, все его используют), есть атрибут с именем
download
.ех.
<a href="somepathto.pdf" download="filename">
здесь не
filename
является обязательным, но если он указан, он будет принимать это имя для загруженного файла.источник
<a href="download/Curriculum_it.pdf.zip">Download curriculum</a>
или это:<a href="download/Curriculum_it.pdf.zip" download="Curriculum_it">Download curriculum</a>
и я не вижу абсолютно никакой разницы в том, как это работает. Оба скачивают мой .zip. А во втором случае использование параметра имени файла, похоже, вообще ничего не делает.Поведение должно зависеть от того, как браузер настроен для обработки различных типов MIME. В данном случае тип MIME - application / pdf. Если вы хотите заставить браузер загружать файл, вы можете попробовать установить другой тип MIME для файлов PDF. Я не рекомендую этого делать, поскольку пользователь должен выбирать, что произойдет, когда они откроют файл PDF.
источник
Вы можете использовать download.js ( https://github.com/rndme/download и http://danml.com/download.html ). Если файл находится по внешнему URL-адресу, вы должны сделать запрос Ajax, но если это не так, вы можете использовать функцию:
Прочтите их документацию, чтобы узнать больше на GitHub.
источник