Предложите пользователю загрузить файл PDF вместо открытия - PullRequest
7 голосов
/ 26 ноября 2009

Если на моем сайте проекта щелкнуть ссылку, файл PDF откроется в новом или родительском окне. Ну, я хочу, чтобы появилось окно, которое предлагает пользователю загрузить файл, а не открывать его.

Кто-нибудь знает простое событие JavaScript onClick, которое сделает это во всех браузерах с настройками по умолчанию?

Мой сервер основан на PHP.

Ответы [ 6 ]

13 голосов
/ 27 ноября 2009

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

<?php
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
readfile('original.pdf');
?>
9 голосов
/ 26 ноября 2009

Поскольку вы отметили его .NET, я бы сказал, что это ваше лучшее решение:

Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=download.pdf");
Response.WriteFile(Server.MapPath("~/files/myFile.pdf"));
Response.Flush();
Response.Close();
3 голосов
/ 26 ноября 2009

Измените Content-Type на application / octet-stream. Однако вы можете обнаружить, что некоторые браузеры по расширению файла будут выводить, что он должен открываться как PDF с вашим любимым средством просмотра PDF.

Response.ContentType = "application/octet-stream";

Также установите следующее:

Response.AppendHeader( "content-disposition", "attachment; filename=" + name );
1 голос
/ 26 ноября 2009
1 голос
/ 26 ноября 2009

Вы не можете сделать это через JavaScript, вам нужна реализация на стороне сервера.

Вот ТАК сообщение, которое должно помочь:
Разрешение пользователю загружать с моего сайта через Response.WriteFile ()

0 голосов
/ 19 июля 2014

Если вы получаете ошибку поврежденного файла, попробуйте это:

header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: application/pdf');
header('Content-disposition: attachment; filename=' . basename($file));
header("Content-Transfer-Encoding:  binary");
header('Content-Length: ' . filesize($file)); // provide file size
header('Connection: close');
readfile($file);

Где $file - полный путь или URL файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...