我在MySQL数据库中存储小拇指。使用PHP我从图像创建缩略图,我只是将其存储到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
格式。
答案 0 :(得分:2)
最好的方法是将图像存储在文件系统上,然后通过MySQL引用它的位置。不建议在MySQL中存储图像。为什么要在数据库中添加额外的不必要的压力?所有大型网站(Facebook等)都将他们的图像存储在文件系统中。