PHP Doctrine保存并在读取BLOB之后

时间:2012-10-11 04:07:39

标签: php image doctrine blob

我正在使用Doctrine将图像保存到数据库中,使用以下内容进行映射:

/** @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 个答案:

答案 0 :(得分:1)

我这样解决了这个问题:

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

echo $image;

我的$ image内容是一个以x开头的十六进制字符串,如果你的字母以0x开头,请执行:substr($ image,2);