Изображение (Blob) отображается только один раз в браузере - PullRequest
2 голосов
/ 21 марта 2019

Я использую 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 Ответ

3 голосов
/ 21 марта 2019

Вам нужно будет либо 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()));
}

Или, возможно, лучше для производительности, иметь свойство, хранящее необработанное содержимое большого двоичного объекта:

/**
 * @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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...