我在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類型。 –