Подтвердить что ты не робот

Силовой браузер для загрузки изображения с помощью javascript window.open?

Есть ли способ сделать загрузку изображения после нажатия на него (без щелчка правой кнопкой мыши сохранить изображение как)?

Я использую небольшую функцию 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);

Но это не сработает. Что я делаю неправильно?
Спасибо заранее!

4b9b3361

Ответ 1

Используйте приложение/октет-поток вместо изображения /jpg:

Если заголовок [Content-Disposition] используется в ответе с типом содержимого приложения/октета-потока, подразумеваемое предположение заключается в том, что пользовательский агент не должен отображать ответ, а непосредственно вводить "save response as... '.
- RFC 2616 - 19.5.1 Content-Disposition

Ответ 2

Я думаю, вы забыли добавить 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;
    }
}

Ответ 3

Или вы можете использовать файл .htaccess для всех ваших файлов изображений. Если вы хотите заставить браузер загружать все ваши изображения (например, из списка таблиц):

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.. Последнее правило гарантирует, что загрузка используется только для определенных типов файлов.

Ответ 4

Это сработало для меня

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

Не уверен, что это помогает?

Ответ 5

Если вы находитесь на сервере apache, это очень просто.

  • Создайте файл с именем .htaccess в каталоге, в котором существуют ваши файлы. Для меня это было assets/.htaccess.
  • Добавьте в файл AddType application/octet-stream .jpg следующее. Вы можете добавить новую строку для каждого расширения файла, которое вам нужно. Например. AddType application/octet-stream .pdf
  • Сохраните файл
  • Очистить кеш браузера
  • Обновите свой браузер и наслаждайтесь!

Ответ 6

Как только вы добавили заголовок Content-Disposition: attachment, вы сможете использовать обычную ссылку:

<a href="download.php?file=test.jpg">Click to download</a>

Какие браузеры вы пробовали?

Ответ 7

Это кнопка, которую вы можете щелкнуть в Internet Explorer, чтобы загрузить pic

<html>
<head>
<title>Your title</title>
</head>
<body>
<form><input type="button" value="Click Me" onClick="window.location.href='image.jpg'"></form>
</body>
</html>

Ответ 8

Браузеры распознают jpg URL's и передают их так же, как и .htm, поэтому я не думаю, что вы можете заставить его использовать user-end (но не положительно).

Прочитайте это

http://apptools.com/phptools/force-download.php

Ответ 9

Попробуйте изменить это:

header("Content-disposition: attachment; filename= ".$file."");

To:

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");
    ?>

Ответ 11

Здесь вы можете заставить все файлы в определенном каталоге запрашивать загрузку.

Требование

В конфигурации .htaccess или Apache поставьте следующее.

<Directory /path/to/downloadable/files>
    Header set Content-Disposition attachment
    Header set Content-Type application/octet-stream
</Directory>