我将小拇指存储在 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
格式。