Как сделать так, чтобы PDF-файл можно было загружать по HTML-ссылке? - PullRequest
115 голосов
/ 13 декабря 2008

Я даю ссылку на файл PDF на моей веб-странице для скачивания, как показано ниже

<a href="myfile.pdf">Download Brochure</a>

Проблема в том, что когда пользователь нажимает на эту ссылку,

  • Если пользователь установил Adobe Acrobat, он открывает файл в том же окне браузера в Adobe Reader.
  • Если Adobe Acrobat не установлен, он открывается пользователю для загрузки файла.

Но я хочу, чтобы он всегда всплывал для загрузки пользователем, независимо от того, установлен Adobe Acrobat или нет.

Скажите, пожалуйста, как я могу это сделать?

Ответы [ 14 ]

0 голосов
/ 05 июня 2017

Я решил использовать весь URL-адрес PDF-файла (вместо того, чтобы просто указывать имя или местоположение файла в href): a href = "domain. com / pdf / filename.pdf"

0 голосов
/ 29 ноября 2016

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

Если вы используете Apache и можете поместить файл .htaccess в соответствующий каталог, вы можете использовать приведенный ниже код. Конечно, вы также можете поместить это в httpd.conf, если у вас есть доступ к нему.

<FilesMatch "\.(?i:pdf)$">
  Header set Content-Disposition attachment
</FilesMatch>

Директива FilesMatch является просто регулярным выражением, поэтому ее можно установить настолько детально, как вы хотите, или вы можете добавить другие расширения.

Строка Header делает то же самое, что и первая строка в сценариях PHP выше. Если вам нужно также установить строки Content-Type, вы можете сделать это таким же образом, но я не нашел в этом необходимости.

0 голосов
/ 21 июня 2012

Попробуйте это:

<a href="pdf_server_with_path.php?file=pdffilename&path=http://myurl.com/mypath/">Download my eBook</a>

Код внутри pdf_server_with_path.php:

header("Content-Type: application/octet-stream");

$file = $_GET["file"] .".pdf";
$path = $_GET["path"];
$fullfile = $path.$file;

header("Content-Disposition: attachment; filename=" . Urlencode($file));   
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . Filesize($fullfile));
flush(); // this doesn't really matter.
$fp = fopen($fullfile, "r");
while (!feof($fp))
{
    echo fread($fp, 65536);
    flush(); // this is essential for large downloads
} 
fclose($fp);
0 голосов
/ 13 декабря 2008

В приложении Ruby on Rails (особенно с чем-то вроде гема Prawn и плагина Prawnto Rails) вы можете сделать это немного проще, чем полноценный скрипт (как в предыдущем примере PHP).

В вашем контроллере:

def index

 respond_to do |format|
   format.html # Your HTML view
   format.pdf { render :layout => false }
 end
end

Часть render: layout => false сообщает браузеру, что нужно открыть «Хотите загрузить этот файл?» вместо того, чтобы пытаться визуализировать PDF-файл. Тогда вы сможете ссылаться на файл как обычно: http://mysite.com/myawesomepdf.pdf

...