我有一个以这种形式存储在数据库中的图像
"/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(String pic):
...
byte[] decodedByte = Base64.decode(pic, Base64.DEFAULT);
Bitmap bm = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
...
pic 以及 decodingByte.length 是正确的,但 bm 始终为空
我尝试将 Base64.DEFAULT 更改为 NO_PADDING 或 NO_WRAP ,但始终为null。
可能是什么原因?
答案 0 :(得分:0)
问题原因是您使用mysqli
real_escape_string()
将图像保存在BLOB中。与任何字符串转义方法一样,此方法适用于文本,并将其感知的内容更改为无效字符。将此应用于图像而不是字符串会损坏图像。
应使用this Oracle blog entry中描述的过程使用send_long_data()
存储BLOB,并且不得转义。