Как заставить пользователей загрузить изображение (например, скачать PDF)? - PullRequest
2 голосов
/ 22 декабря 2009

Поэтому я написал галерею изображений с возможностью загрузки исходного изображения (по умолчанию отображается уменьшенная версия изображения). Я хотел бы знать, как я

Следующий код заставит пользователей сохранять PDF, а не просматривать его в браузере. Мне бы хотелось добиться того же эффекта для изображений (jpg, gif, png), связав действие click с jQuery, как я смогу сделать это?

Взято с php.net

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

HTML:

<div class="download">
<a href="http://www.xyz/abc.jpg">
    Download original image</a>
</div>

ЯШ:

$(".download").click(function(){
  // call a php to download the image
});

Возможно ли это сделать?

Редактировать: Что мне делать в коде JavaScript?

Ответы [ 3 ]

3 голосов
/ 22 декабря 2009

Это возможно. Сервер (PHP-скрипт) должен отправить заголовок Content-Disposition, как показано в вашем первом фрагменте. Например:

header('Content-Disposition: attachment; filename="abc.jpg"');
2 голосов
/ 22 декабря 2009

Возможно, но в IE (какой сюрприз ...) есть небольшая ошибка:

<?php
header( 'Content-Type: ' . $your_content_type . '; charset=UTF-8' );
if( strpos($_SERVER['HTTP_USER_AGENT'],'MSIE') !== false ) header( 'Content-Disposition: attachment; filename="'.rawurlencode($your_filename).'"' );
else header( 'Content-Disposition: attachment; filename="'.addslashes($your_filename).'"' );
?>

РЕДАКТИРОВАТЬ : Больше ничего не нужно делать в javascript! Просто позвольте пользователю щелкнуть URL-адрес изображения или просто добавьте обработчик кликов, который отправляет браузер на URL-адрес изображения! На стороне клиента / браузера вы просто не можете решить, должен ли URL быть загружен или отображаться!

1 голос
/ 22 декабря 2009

Как правило, решение для отображения или загрузки принимается браузером на основе типа MIME. Поэтому я думаю, что это то, что вы хотите:

Если вы просто хотите принудительно загрузить используйте функцию header (), чтобы установить Тип контента должен быть приложения / октет-поток.

Поддержка MIME-типа в Internet Explorer сломан, поэтому он не реагирует на выше. Однако, если вы в дополнение использовать заголовок Content-Disposition вы также может заставить MSIE 5 загрузить файл.

Этот заголовок также позволяет указать имя файла Это работает в обоих Netscape и MSIE 5.

заголовок ( "Content-Disposition: присоединение; имя файла = \ "myfile.abc \" ");

Редактировать: вот некоторая интересная информация, хотя она может не относиться к вашему конкретному варианту использования:

Эта проблема возникает, если выполняются следующие условия:

Имя файла в содержании заголовок расположения использует двухбайтовый набор символов (DBCS), например как японские символы. Второй байт или "trailbyte" любого из Символы DBCS содержат значения, которые представляют файловую систему, зарезервированную символы в ASCII. Например, «trailbyte» содержит значения, которые представляют значения ASCII, такие как 0x5c или 0x7c.

Редактировать 2: Если вы заинтересованы в том, чтобы делать это только на клиенте, ответьте здесь: Принудительный тип пантомимы в браузере (с Javascript)

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