Мне нужно отправить кодированную строку base64
клиенту. Поэтому я открываю и читаю файл изображения на сервере, кодирую его и отправляю эти данные вместе с типом контента image/jpeg
в браузер.
Пример в php:
$image = $imagedir . 'example.jpg';
$image_file = fopen($image, 'r');
$image_data = fread($image_file, filesize($image));
header("Content-type: image/jpeg");
echo 'data:image/jpeg;base64,' . base64_encode($image_data);
Клиент , я звоню:
var img = new Image();
img.src = "http://www.myserver.com/generate.php";
img.onerror = function(){alert('error');}
$(img).appendTo(document.body);
По какой-то причине это не работает. onerror
всегда стреляет. Например, просмотр FireBug Network task
говорит мне, что я получаю правильную информацию заголовка и правильное значение переданных байтов.
Если я отправляю эти данные как Content-type: text/plain
, они работают, строка base64
отображается в браузере (если я вызываю скрипт напрямую). При копировании и вставке этого вывода в src
элемента <img>
изображение получается ожидаемым.
Что я здесь не так делаю?
Решение
Спасибо Pekka
за указание на мою ошибку. При таком подходе вам не нужно (вы не можете!) Кодировать эти двоичные данные изображения в виде строки base64. Без кодировки base64 он просто работает.