Там какой-либо путь состоит в том, чтобы вынудить менеджер загрузок пользователя запустить загрузку для.PDF вместо того, чтобы показать.PDF в новом окне/вкладке?
Для этого вам необходимо отправить HTTP-заголовки ( Content-disposition
). Вы не можете этого сделать на стороне клиента.
Установите Content-Disposition в заголовке HttpResponse:
Content-Disposition = 'attachment; filename=filename.pdf'
Это нужно сделать на стороне сервера. Вы не можете этого сделать на стороне клиента.
Как это сделать, зависит от рассматриваемого языка на стороне сервера.
PHP:
header('Content-Disposition: attachment; filename="' . $filename . '"');
Java:
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
.NET:
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
Если на стороне сервера нет средств для потоковой передачи файла PDF, вам необходимо настроить его на уровне веб-сервера. Например, в Apache HTTPD вы можете разместить / развернуть файл .htaccess
в корне папки PDF со следующей записью:
<Files *.pdf>
Header set Content-Disposition attachment
</Files>
или настроить его глобально в файле httpd.conf
. Аналогичный подход существует для IIS с файлом web.config
.
<?php
// required for IE, otherwise Content-disposition is ignored
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
}
$reader = fopen($filename, "r");
$contents = fread($reader, filesize($filename));
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($filename));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
ob_end_clean();
echo $contents;