将图像存储在MySQL BLOB中

时间:2013-07-19 17:13:18

标签: php mysql base64 blob

我在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格式。

1 个答案:

答案 0 :(得分:2)

最好的方法是将图像存储在文件系统上,然后通过MySQL引用它的位置。不建议在MySQL中存储图像。为什么要在数据库中添加额外的不必要的压力?所有大型网站(Facebook等)都将他们的图像存储在文件系统中。

相关问题