我正在使用Symfony2和Twig:
在实体类中
/**
* @ORM\Column(name="photo", type="blob", nullable=true)
*/
private $photo;
// ...
public function displayPhoto()
{
return "data:image/png;base64," . base64_encode(stream_get_contents($this->getPhoto()));
}
在视图中
<img src="{{ entity.displayPhoto }}">
但是如果我写
<img src="{{ entity.displayPhoto }}">
<img src="{{ entity.displayPhoto }}">
然后,浏览器仅第一次显示它。 在浏览器(Firefox)中,DOM如下所示:
<img src="data:image/png;base64,/9j/4QS...//much more chars//...f7R+ooYz//Z">
<img src="data:image/png;base64,">
因此图像内容不存在于第二个img标签中。
有什么想法可以多次显示图像吗?
答案 0 :(得分:3)
您将需要rewind
您的流
/**
* @ORM\Column(name="photo", type="blob", nullable=true)
*/
private $photo;
public function displayPhoto()
{
rewind($this->getPhoto());
return "data:image/png;base64," . base64_encode(stream_get_contents($this->getPhoto()));
}
也许为了提高性能,可以使用一个属性来存储blob的原始内容:
/**
* @ORM\Column(name="photo", type="blob", nullable=true)
*/
private $photo;
private $rawPhoto;
public function displayPhoto()
{
if(null === $this->rawPhoto) {
$this->rawPhoto = "data:image/png;base64," . base64_encode(stream_get_contents($this->getPhoto()));
}
return $this->rawPhoto;
}