javascript — принудительная загрузка удаленных изображений в браузер

Предположим, у меня есть изображение, размещенное в Google: https://www.google.ae/images/srpr/logo11w.png

Я хочу, чтобы этот файл изображения загружался, а не открывался прямо в браузере.

Я пытался:

<?php
function downloadFile($file, $type)
{
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: $type");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile($file);
}
downloadFile("img.jpg", "image/jpg");
?>

Это работает, но только для локально размещенных изображений, а не для изображений, размещенных удаленно, как в примере Google выше.

1

Решение

Самый первый пример на страница справки readfile () называется «Принудительное скачивание с использованием readfile ()», с .gif файл:

$file = 'monkey.gif';

if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}

Под Заметки раздел следующий совет:

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

Так что если вы просто замените $file = 'https://www.google.ae/images/srpr/logo11w.png'; за $file = 'monkey.gif'; приведенный выше скрипт должен заставить загрузку изображения.

Конечно, большой недостаток этого подхода заключается в том, что изображение сначала передается на ваш сервер, а затем загружается на клиент. Но, как @charlietfl написал «Вы не можете контролировать, как другой сервер обрабатывает запросы». так что вы не можете ссылаться непосредственно на первоисточник и ожидать загрузки файла.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector