Я даю посилання на pdf файл на своїй веб-сторінці для завантаження, як показано нижче
<a href="myfile.pdf">Download Brochure</a>
Проблема полягає в тому, що коли користувач натискає на це посилання, то
Але я хочу, щоб він завжди відкривався користувачеві для завантаження, незалежно від того, встановлений Adobe Acrobat чи ні.
Підкажіть, будь ласка, як це можна зробити?
Замість посилання на файл .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: і, очевидно, запустіть деякі перевірки здорового глузду для змінної "file", щоб запобігти крадіжці ваших файлів, наприклад, не приймайте розширення файлів, забороняйте косі риски, додавайте .pdf до значення
Це є ключовим моментом:
header("Content-Type: application/octet-stream");
Тип вмісту application/x-pdf-документ або application/pdf надсилається під час надсилання PDF-файлу. Adobe Reader зазвичай встановлює обробник для цього MIME-типу, щоб браузер передавав документ в Adobe Reader при отриманні будь-якого з MIME-типів PDF.
У додатку Ruby on Rails (особливо з чимось на зразок Prawn gem і плагіна 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