Есть ли способ сделать изображение загружаемым после нажатия на него (без щелчка правой кнопкой мыши сохранить изображение как )?
Я использую небольшую функцию Javascript для вызова страницы загрузки:
<a href="#" onclick="window.open('download.php?file=test.jpg', 'download', 'status=0');" >Click to download</a>
На странице download.php у меня есть что-то вроде:
$file = $_GET['file']; header('Content-Description: File Transfer'); header("Content-type: image/jpg"); header("Content-disposition: attachment; filename= ".$file.""); readfile($file);
Но это не сработает. Что я делаю не так?
Заранее спасибо!
Используйте application / octet-stream вместо image / jpg :
Если заголовок [Content-Disposition] используется в ответе с типом содержимого приложения / октета-потока, подразумеваемое предложение состоит в том, что пользовательский агент не должен отображать ответ, а непосредственно вводить «save response as …» диалог.
– RFC 2616 – 19.5.1 Content-Disposition
Я думаю, вы забыли добавить Path в заголовок
if(isset($_GET['file'])){ //Please give the Path like this $file = 'images/'.$_GET['file']; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); 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($file)); ob_clean(); flush(); readfile($file); exit; } }
Или вы можете использовать файл .htaccess для всех ваших файлов изображений. Если вы хотите заставить браузер загружать все ваши изображения (fe из списка таблиц):
RewriteEngine On RewriteBase / RewriteCond %{QUERY_STRING} ^download$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .(jpe?g|gif|png)$ index.php?file=noFoundFilePage [L,NC] RewriteCond %{QUERY_STRING} ^download$ RewriteCond %{REQUEST_FILENAME} -f RewriteRule .(jpe?g|gif|png)$ - [L,NC,T=application/octet-stream]
Это ищет файлы изображений, которые пытаются загрузить их в браузер. -f RewriteConds также проверяет, что файл exsist .. Последнее правило гарантирует, что загрузка используется только для определенных типов файлов.
Это сработало для меня
header("Pragma: public"); header('Content-disposition: attachment; filename='.$title); header("Content-type: ".mime_content_type($sample_file)); header('Content-Transfer-Encoding: binary'); ob_clean(); flush(); readfile($sample_file);
Я также добавил следующее .htaccess
SetEnvIf Request_URI "\.jpg$" requested_jpg=jpg Header add Content-Disposition "attachment" env=requested_jpg
Не уверен, что это помогает?
Если вы находитесь на сервере Apache, это очень просто.
assets/.htaccess
. AddType application/octet-stream .jpg
. Вы можете добавить новую строку для каждого расширения файла, которое вам нужно. Например, AddType application/octet-stream .pdf
После того, как вы добавили заголовок Content-Disposition: attachment
, вы сможете использовать обычную ссылку:
<a href="download.php?file=test.jpg">Click to download</a>
С какими браузерами вы это пробовали?
Это кнопка, которую вы можете щелкнуть в Internet Explorer, чтобы загрузить рис.
<html> <head> <title>Your title</title> </head> <body> <form><input type="button" value="Click Me" onClick="window.location.href='image.jpg'"></form> </body> </html>
Браузеры распознают URL's
jpg и передают их так же, как и .htm, поэтому я не думаю, что вы можете заставить его использовать user-end (но не положительно).
Прочитай это
Посмотрите, помогает ли это:
Файл Webkit и Excel (PHPexcel)
Попробуйте изменить это:
header("Content-disposition: attachment; filename= ".$file."");
Для того, чтобы:
header("Content-disposition: attachment; filename= ".$file);
Если приведенное выше не работает для вас, здесь функция принудительно загружает файл:
<?php function downloadFile($file, $type) { header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=$file"); header("Content-Type: Content-type: $type"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($file)); readfile($file); } downloadFile("sd.jpg", "image/jpg"); ?>
Вот способ заставить все файлы в определенном каталоге запрашивать загрузку.
требование
В конфигурации .htaccess или Apache введите следующее.
<Directory /path/to/downloadable/files> Header set Content-Disposition attachment Header set Content-Type application/octet-stream </Directory>