Вместо ссылки на файл .PDF сделайте что-нибудь вроде
<a href="pdf_server.php?file=pdffilename">Download my eBook</a>
который выводит настраиваемый заголовок, открывает PDF-файл (двоичный сейф) и распечатывает данные в браузере пользователя, после чего они могут выбрать сохранение PDF-файла, несмотря на настройки своего браузера. Pdf_server.php должен выглядеть так:
header("Content-Type: application/octet-stream");
$file = $_GET["file"] .".pdf";
header("Content-Disposition: attachment; filename=" . urlencode($file));
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($file));
flush(); // this doesn't really matter.
$fp = fopen($file, "r");
while (!feof($fp))
{
echo fread($fp, 65536);
flush(); // this is essential for large downloads
}
fclose($fp);
PS: и, очевидно, запустите некоторые проверки вменяемости в переменной «файл», чтобы люди не могли украсть ваши файлы, например, не принимать расширения файлов, запрещать косые черты, добавлять .pdf к значению
"Content-type: application/force-download"
здесь нигде нет: iana.org/assignments/media-types/application Это полностью поддельный заголовок. Пожалуйста, не придумывайте заголовки и не отправляйте их. Не могли бы вы обновить свой ответ. Спасибо.fopen
.Это обычная проблема, но мало кто знает, что есть простое решение HTML 5:
Где
newfilename
предложенное имя файла для сохранения пользователем. Или по умолчанию будет использоваться имя файла на стороне сервера, если вы оставите его пустым, например:Совместимость: я тестировал это на Firefox 21 и Iron, оба работали нормально. Он может не работать в браузерах, несовместимых с HTML5 или устаревших. Единственный протестированный мной браузер, который не загружал принудительно, это IE ...
Проверить совместимость можно здесь: http://caniuse.com/#feat=download
источник
Не перебирайте каждую строку файла. Вместо этого используйте readfile , это быстрее. Это не на сайте php: http://php.net/manual/en/function.readfile.php
Не забудьте очистить вашу переменную get, так как кто-то может загрузить некоторые файлы php ...
источник
Вместо использования PHP-скрипта для чтения и сброса файла удобнее переписать заголовок, используя
.htaccess
. Это сохранит "красивый" URL (myfile.pdf
вместоdownload.php?myfile
).источник
^\.pdf$
регулярное выражение.Я нашел способ сделать это с помощью старого простого HTML и JavaScript / jQuery, который постепенно ухудшается. Протестировано в IE7-10, Safari, Chrome и FF:
HTML для ссылки для скачивания:
jQuery (чистый код JavaScript был бы более подробным), который имитирует нажатие на ссылку после небольшой задержки:
Чтобы сделать это более надежным, вы можете добавить обнаружение функции HTML5, и если ее нет, используйте,
window.open()
чтобы открыть новое окно с файлом.источник
Это ключ:
При отправке файла PDF отправляется Content-type application / x-pdf-document или application / pdf. Adobe Reader обычно устанавливает обработчик для этого типа MIME, поэтому браузер передает документ в Adobe Reader при получении любого из типов PDF MIME.
источник
Я знаю, что очень поздно отвечу на этот вопрос, но я нашел способ сделать это в javascript.
источник
Попробуй это:
<a href="pdf_server_with_path.php?file=pdffilename&path=http://myurl.com/mypath/">Download my eBook</a>
Код внутри pdf_server_with_path.php:
источник
Вот другой подход. Я предпочитаю не полагаться на поддержку браузера или решать эту проблему на уровне приложения, а использовать логику веб-сервера.
Если вы используете Apache и можете поместить файл .htaccess в соответствующий каталог, вы можете использовать приведенный ниже код. Конечно, вы также можете поместить это в httpd.conf, если у вас есть к нему доступ.
Директива FilesMatch - это просто регулярное выражение, поэтому ее можно настроить так детально, как вы хотите, или вы можете добавить другие расширения.
Строка заголовка делает то же самое, что и первая строка в сценариях PHP выше. Если вам нужно также установить строки Content-Type, вы можете сделать это таким же образом, но я не счел это необходимым.
источник
Я решил свой, используя весь URL-адрес файла PDF (вместо того, чтобы просто указать имя файла или местоположение в href): a href = "domain. Com / pdf / filename.pdf"
источник
если вам нужно ограничить скорость загрузки, используйте этот код !!
Для получения дополнительной информации нажмите здесь
источник
источник
В приложении Ruby on Rails (особенно с чем-то вроде гема Prawn и плагина Prawnto Rails) вы можете сделать это немного проще, чем полный скрипт (как в предыдущем примере PHP).
В вашем контроллере:
Часть render: layout => false сообщает браузеру открыть вопрос «Вы хотите загрузить этот файл?» вместо попытки отобразить PDF-файл. Тогда вы сможете нормально ссылаться на файл: http://mysite.com/myawesomepdf.pdf
источник