2012-10-11 41 views
1

後我保存圖像與學說的數據庫,這個映射:PHP學說保存和讀取BLOB

/** @Column(type="blob") **/ 
protected $data; 

一切似乎確定。我可以通過這種方式將圖像數據保存在數據庫中:

$largeImage = new ImageData(); 
    $handle = fopen($imagePath, "r"); 
    $bytes = fread($handle, filesize($imagePath)); 
    $largeImage->setData(base64_encode($bytes)); 
    fclose($handle); 

    $entityManager->persist($largeImage); 
    $entityManager->flush(); 

好的。數據被保存,但是當我需要閱讀時,我不能。

var_dump($image->getData()); 
// outputs resource(1) of type (stream) 

所以,我嘗試這樣做:

$fp = fopen('image.jpg', 'w'); 
fwrite($fp, base64_decode(stream_get_contents($image->getData()))); 
fclose($fp); 

和文件的內容不是來自一個圖像,所以圖像不被Windows照片查看器中顯示。

回答

1

我解決它通過這樣做:

$image = stream_get_contents($image->getData()); 
$hex = substr($image, 1); 
$image = pack("H*", $hex); 

echo $image; 

我的$圖像內容是一個十六進制字符串開始與X,如果你以0x開始,這樣做:SUBSTR($圖像,2);