图片(Blob)在浏览器中仅显示一次

时间:2019-03-20 21:15:14

标签: php symfony twig blob

我正在使用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标签中。

有什么想法可以多次显示图像吗?

1 个答案:

答案 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;
}