WedX - журнал о программировании и компьютерных науках

Сохраненное изображение в Mysql BLOB, ошибка при попытке его отображения

Надеюсь, кто-нибудь поможет мне с этим беспорядком. Я создаю небольшое мобильное приложение, которое преобразует ряд объектов холста в dataUrl, а затем кодирует данные с помощью метода btoa():

var canvas  = document.getElementById("imagen_envio");
var dataUrl = canvas.toDataURL('image/jpeg', .7);
var file = btoa(dataUrl);

После этого он отправляет файл в файл php на сервере, используя AJAX, чтобы сохранить его в Medium BLOB в MySQL. На данный момент все работает нормально, но после этого файл php должен отображать изображения, но он не работает:

ссылка: https://a.gob.mx/PHP_tratayretrata/img.php

//img.php
$connect = mysqli_connect($host, $user ,$password) or die("No se pudo conectar.");
mysqli_select_db($connect,$DB) or die("No se encuentra la base.");

$sql = "SELECT img FROM fotos WHERE usuario = 1 AND tema = 1 AND ejercicio = 1";
$result=mysqli_query($connect, $sql);

$row=mysqli_fetch_array($result);

header("Content-type: image/jpeg; charset=UTF-8");

$img = base64_decode($row["img"]);

echo '<img src="'.$img.'"/>';
?>

Я сделал еще один файл php, который печатает данные в текст: https://a.gob.mx/PHP_tratayretrata/print-data.php, и я использовал эти данные в простом html-файле, чтобы убедиться, что данные не повреждены: https://a.gob.mx/PHP_tratayretrata/test-data.html и это работает!

Поэтому я понятия не имею, что я делаю неправильно. Любые идеи? Заранее спасибо!


Ответы:


1

Вы кодируете base-64 строку, которая уже закодирована base-64, поскольку toDataURL() возвращает data-uri, который содержит заголовок data-uri перед фактическими данными base-64.

Это не может быть декодировано в необработанные данные изображения.

Вам нужно отрезать заголовок от вашего data-uri, отправить его как есть на сервер (строка base-64). Вы можете сохранить это в базе данных и расшифровать позже.

/// this result is already a base-64 encoded string with a header
var dataUrl = canvas.toDataURL('image/jpeg', .7);

/// this will only base-64 encode again (incl. the header)
//var file = btoa(dataUrl);

data-uri выглядит следующим образом:

data:[<MIME-type>][;charset=<encoding>][;base64],<data>

Итак, здесь вам нужно нарезать заголовок и включить последнюю запятую. Остальные данные будут изображением в кодировке base-64.

16.11.2013

2

вам нужно удалить слушателя, и если вы сохраняете файл с кодировкой base64 в базу данных, вам не нужно его декодировать, ваше эхо должно быть таким:

echo '<img src="data:img/jpeg;base64,'.$row['img']).'">';
16.11.2013
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]