Как отобразить изображение, возвращенное в виде байтов в браузере, без запроса загрузки? - PullRequest
2 голосов
/ 08 декабря 2010

Я написал следующую функцию PHP, но все равно получаю приглашение загрузить файл:

function navigateToBytes($contentType, $bytes){
  header('Content-Type: ' .$contentType); 
  //header('Content-Transfer-Encoding: binary'); // UPDATE: as pointed out this is not needed, though it does not solve the problem
  header('Content-Length: '.strlen($bytes));
  ob_clean();
  flush();
  echo $bytes;
}

Пример вызова функции:

navigateToBytes('image/jpeg', $bytes); // UPDATE: turns out this does work, using image/tiff for tiff images is when the browser does not display the image

где $ байты - это байты, прочитанные из файла.

Ответы [ 4 ]

1 голос
/ 09 декабря 2010

Приносим извинения всем - оказывается, у меня была проблема, потому что изображения, которые я тестировал, были TIFF (с Content-Type, правильно установленным на image / tiff), когда я использовал JPEG, браузер отображал изображение!

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

Для записи единственными заголовками, которые мне нужно было изменить, был

Content-Type, 

Я должен установить

Content-Length 

, если только я не установил

Transfer-Encoding: chunked
0 голосов
/ 08 декабря 2010

Мне кажется, это правильное поведение.Браузер - это окно для просмотра людьми. Люди, в общем и целом, не хотят просматривать двоичные данные.Как вы думаете, что должно произойти?

Случайная рекомендация: если есть сайт, который делает то, что вы хотите, используйте curl, чтобы прослушать отправляемые им заголовки.используйте точно такие же заголовки в вашем собственном скрипте.

0 голосов
/ 08 декабря 2010

Для начала избавьтесь от вещей, которых нет в HTTP (Content-Transfer-Encoding).

Затем получите инструмент трассировки HTTP, такой как плагин Live HTTP headers для Firefox, и сравните «ваши» заголовки с заголовками, полученными для рабочего образа.

Если есть сомнения, опубликуйте здесь трассировку HTTP.

0 голосов
/ 08 декабря 2010

Попробуйте HTTP-заголовок "Content-Disposition: Inline", однако некоторые браузеры могут попытаться спасти пользователя от просмотра двоичных данных.Вот случайная статья блога на этот заголовок HTTP:

http://dotanything.wordpress.com/2008/05/30/content-disposition-attachment-vs-inline/

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