2014-10-27 3 views
1

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

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

Я пробовал:

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

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

+0

вы не можете контролировать, как другой сервер обрабатывает запросы. – charlietfl

+0

да, но есть ли шанс там, например, использовать js или что-нибудь для этого? – user3800108

+0

«Не работает» - это не очень проблема. Поверните отчет об ошибках PHP как можно выше, и посмотрите в своих журналах. – Quentin

ответ

3

Самый первый пример на readfile() manual page под названием 'Принуждение скачать с помощью 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; 
} 

в соответствии с лицензией Notes раздел следующий совет:

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

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

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

Смежные вопросы