#angular #symfony
#angular #symfony
Вопрос:
Прошло много дней с тех пор, как я пытаюсь отобразить большой двоичный объект (изображение, хранящееся в моей базе данных) в моем проекте Angular (Angular 10.0.7).
У меня есть REST API в Symfony 4.3.11, и он работает хорошо.
Большой двоичный объект в моей базе данных (MySQL) закодирован в Base64, тип, если быть точным, LONGBLOB. Я попытался расшифровать его с помощью онлайн-сайта, и это работает, у меня есть мое изображение обратно.
Проблема в том, что когда я запускаю свой запрос, я получаю :
"image": "Resource id #788",
Моя сущность в Symfony — это :
/**
* @var string|null
*
* @ORMColumn(name="IMAGE", type="blob", length=0, nullable=true)
*/
private $image;
Я попытался заменить тип на "text"
или "string"
, но я получаю эту ошибку :
{
"code": 500,
"message": "Your data could not be encoded because it contains invalid UTF8 characters."
}
На стороне Angular у меня это происходит, когда я пытаюсь распечатать изображение в своем браузере :
<img _ngcontent-shg-c116="" src="unsafe:data:image/png;base64,Resource id #788">
Это кажется законным, потому что мой запрос вернул эту строку…
Как справиться с этим на моем Angular? Или я должен изменить свой запрос? И если да, то как?
Ответ №1:
blob
тип doctrine возвращает ресурс, чтобы вы могли попробовать в своей сущности что-то вроде:
private string $imageBase64;
public function getImageBase64(): ?string
{
if (null === $this->image) {
return null;
}
if (!isset($this->imageBase64)) {
$data = stream_get_contents($this->image);
fclose($this->image);
$this->imageBase64 = base64_encode($data);
}
return $this->imageBase64;
}
Комментарии:
1. Где я должен это написать? Потому что кажется, что мой запрос не заботится о моей сущности, как будто я пытался удалить все получатели и установщики, и он по-прежнему возвращает мне все. У меня есть только один объект и контроллер, поэтому я его не понимаю…
Ответ №2:
Я провел еще несколько исследований, но все еще не могу понять, как справиться с этим типом.
Но вот что я нашел :
- В W3school :
PHP Resource
The special resource type is not an actual data type. It is the storing of a reference to functions and resources external to PHP.
A common example of using the resource data type is a database call.
We will not talk about the resource type here, since it is an advanced topic.
- В Doctrine-Project (благодаря ответу shyv) :
blob
Maps and converts binary string data without a maximum length.
If you don't know the maximum length of the data to be stored, you should consider using this type.
Values retrieved from the database are always converted to PHP's resource type or null if no data is present.