Мне нужно отправить 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);
Clientside, я звоню:
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
отображается в браузере (если я вызываю script напрямую). Копирование и вставка этого вывода в элемент src
элемента <img>
показывает изображение, как ожидалось.
Что я здесь делаю неправильно?
Решение
Спасибо Pekka
за то, что указали на мою ошибку. Вам не нужно (вы не можете!) Кодировать данные двоичного изображения как base64 в этом подходе. Без кодировки base64 он просто работает.