2012-10-11 42 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);