У меня есть несколько больших каталогов PDF на моем веб-сайте, и мне нужно связать их по мере загрузки. Когда я гуглил, я обнаружил такую вещь, отмеченную ниже. Он должен открыть всплывающее окно « Сохранить как ... » по ссылке нажмите ...
<head>
<meta name="content-disposition" content="inline; filename=filename.pdf">
...
Но это не работает: / Когда я ссылаюсь на файл, как показано ниже, он просто ссылается на файл и пытается открыть файл.
<a href="filename.pdf" title="Filie Name">File name</a>
ОБНОВЛЕНИЕ (согласно ответам ниже):
Как я вижу, для этого не существует 100% надежного кросс-браузерного решения. Вероятно, лучшим способом является использование одного из веб-сервисов, перечисленных ниже, и предоставление ссылки для скачивания ...
Ответы:
Из ответа на Принудительный браузер, чтобы сохранить файл, как после нажатия на ссылку :
источник
download
атрибут ограничен Chrome, Firefox и Opera. Даже последние версии IE и Safari не поддерживают его. Для дальнейшей поддержки: проверьте caniuse.com/#feat=download !Это работает для меня в Firefox и Chrome.
источник
target="_blank"
не менее, он может сделать его несколько более удобным для не поддерживающих браузеров (PDF-файлы затем открываются в новом окне / вкладке, а не перезаписывают текущую страницу).target="_blank"
было необходимо, так какdownload
только не удалось правильно запустить загрузку (Chrome)download
атрибуте, она будет использоваться как имя файла. Я использую его в пользовательских скриптах все время.Мета-теги не являются надежным способом достижения этого результата. Как правило, вы даже не должны этого делать - пользователь / пользовательский агент должен решать, что делать с контентом, который вы предоставляете. Пользователь всегда может заставить свой браузер загрузить файл, если он этого хочет.
Если вы все еще хотите заставить браузер загрузить файл, измените заголовки HTTP напрямую. Вот пример кода PHP:
Обратите внимание, что это всего лишь расширение протокола HTTP; некоторые браузеры могут игнорировать это в любом случае.
источник
ob_end_flush()
тоже не помогло.У меня была такая же проблема, и я нашел решение, которое до сих пор прекрасно работало. Вы помещаете следующий код в свой
.htaccess
файл:Он пришел из « Принудительно загрузить файл вместо того, чтобы отображаться в браузере» .
источник
<FilesMatch "\.(pdf|xlsx?|docx?)$">
Я нашел очень простое решение для Firefox (работает только с относительным, а не с прямым href): add
type="application/octet-stream"
:источник
Попробуйте добавить эту строку в ваш файл .htaccess.
Я надеюсь, что он будет работать, так как он не зависит от браузера.
источник
Обычно это происходит, потому что некоторые настройки браузера или плагины напрямую открывают PDF в том же окне, как простая веб-страница.
Следующее может помочь вам. Я сделал это на PHP несколько лет назад. Но в настоящее время я не работаю на этой платформе.
Сохраните выше как download.php .
Сохраните этот небольшой фрагмент в виде файла PHP где-нибудь на вашем сервере, и вы можете использовать его для загрузки файла в браузере, а не для непосредственного отображения. Если вы хотите обслуживать файлы, отличные от PDF, удалите или измените строку 5.
Вы можете использовать это так:
Добавьте следующую ссылку в ваш HTML-файл.
Ссылка от: Этот блог
источник
download.php?file=database_password_file.php
например.Просто поместите следующий код в ваш
.htaccess
файл:Или вы также можете сделать трюк с помощью JavaScript
источник
Я просто использовал это, но я не знаю, работает ли он во всех браузерах.
Это работает в Firefox:
источник
Очень простой способ для достижения этой цели, без использования внешних сайтов для загрузки или изменения заголовков и т.д., чтобы просто создать ZIP - файл с PDF внутри и ссылки непосредственно в файл ZIP. Это ВСЕГДА вызовет диалоговое окно «Сохранить / Открыть», и людям все еще будет легко дважды щелкнуть окна PDF, когда запущена программа, связанная с .zip.
Кстати, отличный вопрос, я тоже искал ответ, так как большинству встроенных в браузер плагинов PDF требуется слишком много времени, чтобы отобразить что-либо (и часто зависает браузер во время загрузки PDF).
источник
Решение на стороне сервера более совместимо, пока атрибут «download» не будет реализован во всех браузерах.
Одним примером Python может быть пользовательский обработчик HTTP-запроса для хранилища файлов. Ссылки, которые указывают на хранилище файлов, генерируются так:
Вот код:
источник
Очень простой способ сделать это, если вам нужно принудительно загрузить отдельную ссылку на вашей странице, - это использовать атрибут загрузки HTML5 в href-ссылке.
Смотрите: http://davidwalsh.name/download-attribute
при этом вы можете переименовать файл, который будет загружать пользователь, и в то же время принудительно загружать его.
Были споры о том, является ли это хорошей практикой или нет, но в моем случае у меня есть встроенный просмотрщик для PDF-файла, и просмотрщик не предлагает ссылку для скачивания, поэтому я должен предоставить ее отдельно. Здесь я хочу убедиться, что пользователь не открывает PDF-файл в веб-браузере, что может привести к путанице.
В этом нет необходимости открывать диалоговое окно «Сохранить как», но ссылка будет загружена прямо в заданный пункт назначения загрузки. И, конечно, если вы делаете сайт для кого-то другого, и вам нужно, чтобы он вручную вводил атрибуты в свои ссылки, это, вероятно, плохая идея, но если есть способ добавить атрибут в ссылки, это может быть легким решением.
источник
Это старый пост, но вот мое решение в JavaScript с использованием библиотеки jQuery.
Вам просто нужно использовать класс
force-download
внутри вашего<a>
тега, и вы автоматически загрузите его. Вы также можете добавить его к родителюdiv
и получить все ссылки внутри него.Пример:
Это отлично подходит для WordPress и любых других систем или пользовательских сайтов.
источник
После имени файла в HTML-код добавляю
?forcedownload=1
Для меня это был самый простой способ вызвать диалоговое окно для сохранения или загрузки.
источник
Если в браузере есть плагин, который знает, как открыть файл PDF, он откроется напрямую. Как в случае изображений и HTML-контента.
Таким образом, альтернативный подход - не отправлять ваш MIME-тип в ответе. Таким образом, браузер никогда не узнает, какой плагин должен его открыть. Следовательно, это даст вам диалоговое окно Сохранить / Открыть .
источник
У меня была очень похожая проблема с добавленной проблемой, которая требовалась для создания ссылок на скачивание файлов внутри ZIP-файла.
Сначала я попытался создать временный файл, затем предоставил ссылку на временный файл, но обнаружил, что некоторые браузеры просто отображают содержимое (файл CSV Excel), а не предлагают его для загрузки. В конце концов я нашел решение с помощью сервлета. Он работает как на Tomcat, так и на GlassFish, и я попробовал это сделать в Internet Explorer 10 и Chrome.
Сервлет принимает в качестве входных данных полный путь к ZIP-файлу и имя файла внутри ZIP-файла, который необходимо загрузить.
Внутри моего JSP-файла у меня есть таблица, отображающая все файлы внутри zip-файла со ссылками:
onclick='download?zip=<%=zip%>&csv=<%=csv%>'
Код сервлета находится в download.java:
Для компиляции на Tomcat вам нужно, чтобы classpath включал tomcat \ lib \ servlet-api.jar или GlassFish: glassfish \ lib \ j2ee.jar
Но любой из них будет работать на обоих. Вы также должны установить свой сервлет
web.xml
.источник
Добавить заголовок ответа Content-Disposition: attachment; сопровождаемый именем файла. Удалите мета-содержимое-расположение; который откроет документ в том же окне
В Java это установлено как
источник
С большими файлами PDF браузер зависает. В Mozilla выберите Сервис → Параметры → Приложения , затем рядом с типом содержимого документ Adobe Acrobat. В раскрывающемся списке «Действие» выберите « Всегда спрашивать» .
Это не сработало для меня, так что сработало:
Инструменты меню * → Дополнения → Adobe Acrobat (плагин Adobe PDF для Firefox) → ОТКЛЮЧИТЬ. Теперь я могу скачивать электронные книги!
источник