У меня есть изображение, хранящееся в базе данных в этой форме
"/9j/4AAQSkZJRgABAQAAAQABAAD/2w <...> igD//2Q=="
так что, безусловно, base64 в кодировке.
Я получаю это через функцию PHP:
...
$query = $db->prepare("SELECT `Data` FROM `UserPicture` WHERE `UserId` = ?");
$query->bind_param('i', $id);
$query->execute();
$query->bind_result($data);
$query->fetch();
echo base64_encode($data);
Android получает это через звонок:
StringBuffer result = m_dbi.getResult(Constants.SERVER_HOST_PHP + "/get_user_picture.php", params, "GET");
Отладка Я видел это результат верно.
я пас result.toString () в writeImageToFile (строковое изображение), которое:
...
byte[] decodedByte = Base64.decode(pic, Base64.DEFAULT);
Bitmap bm = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
...
фильм правильно, а также decodedByte.length но Ьт всегда ноль.
Я пытался изменить Base64.DEFAULT в NO_PADDING или же NO_WRAP но всегда ноль.
Что может быть причиной ?
Проблема была вызвана тем, что вы сохранили изображения в BLOB с помощью mysqli
«s real_escape_string()
, Этот метод, как и любой метод экранирования строк, предназначен для текста и изменяет содержимое, которое он воспринимает как недопустимые символы. Применение этого к изображению, а не к строке, повредило изображение.
BLOB следует хранить с использованием процедуры, описанной в эта запись в блоге Oracle, с помощью send_long_data()
и не сбежать.
Других решений пока нет …