我在MySQL数据库中存储小拇指。使用PHP,我从图像创建一个缩略图,然后将其存储到一个BLOB列中。在MySQL中存储图像BLOB
MySQL似乎将二进制映像保存为数据库中的Base64字符串。问题是MySQL似乎将它存储为application/octet-stream
而不是jpg
文件。
我知道,因为我测试的Base64编码字符串,此代码:
<?php
$encoded_string = "....";
$imgdata = base64_decode($encoded_string);
$f = finfo_open();
$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE);
echo $mime_type;
?>
是MySQL的自动我的形象转换到Base64字符串?如果是这样,有没有办法确保它保存为JPG?
我知道节约大拇指文件系统是更好,但不幸的是这是情况并非如此,我不是在寻找的答案,将其保存到文件系统。我想知道为什么它被保存为octed stream
。
我使用WideImage
创建拇指,像这样:
$thumb = \WideImage::load ($filepath)
->resize(117, 88)
->crop ('center', 'center', 117, 88)
->asString('jpg');
变量$thumb
包含有效的二进制数据。因为我可以打印它,它看起来不错,而且fwrite
写了一个很好的JPG。
然后我用INSERT查询将它保存到数据库中。但是当我再次选择它时,它给了我一个octed stream
格式。
应该将图像存储在文件系统上并通过MySQL引用它们。 –
mysql不使用base64来存储blob。 base64是一种非常节省空间的格式,并且在原始二进制版本上花费你大约33%。 MySQL也不太关心MIME类型。如果你说它是一团糟,那么它只会进入一系列的位。不要紧,如果它是一个JPG格式,PDF格式,或你的奶奶的苹果派配方文本格式。 –
您只需回显blob即可获取图像。我不认为MySQL真的关心MIME类型。 –