Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Exibir imagem Blob no Angular 10

Estou pegando um binário do backend e quero exibir no angular a imagem png.

Alguém sabe o problema?

constructor( private sanitizer:DomSanitizer ){}

const mediaType = 'data:image/png;base64,';
const blob = new Blob([dados['content'][0].imagem.dados],  { type: mediaType });
const unsafeImg = URL.createObjectURL(blob);
this.imagem = this.sanitizer.bypassSecurityTrustResourceUrl(unsafeImg);

Com esse código eu consigo a url da imagem blob. no console do navegador:

SafeResourceUrlImpl {changingThisBreaksApplicationSecurity: "blob:http://localhost:4200/157deaf1-f0db-4102-975d-1c5b9ce07a97"}
changingThisBreaksApplicationSecurity: "blob:http://localhost:4200/157deaf1-f0db-4102-975d-1c5b9ce07a97"

Mas a imagem não renderiza com <img [src]="imagem"/>

Obs:

na url do blob não está o tipo 'data:image/png;base64', aparece somente os bytes da imagem.

ex:

XW6sqx15uPxW3z+fDP58Ks1ZSIwmXt9unK5Lum0YyCv13N5sDo8+GhzoV9vFeAvlt3uU+Kw2h+vFePxW7k8dvL5b2526Siz4eMw2mJwmfd7tLZ7M6z2J2Dv1+y2Jzo8+Di8Nms1JN1uEt8u1S+3qz2+vNxtUX4+/au1ZdutEHl8d263Kau1pZ5ulDe7dTT6MV0t0qFwGHw9+zp9OLT6cbF4rSv1pjP58P7/fry+O+WyXZ+vViw1pnv9+vj8Nqo0o79/v2/362Yynlzt0iUyHS526WEwF+QxW56u1K63KeRxnCk0Il/vVnc7tK+3qt4uU+ay318vFW93arn8uDu9umDv16n0o3a7M/5/PedzYG73ajY682hz4bE4bP0+fDQ6MPB4K/x9+31+vKSx3Hp8+Ly+O7v9urq9OOby36/3qzS6MSczH622qHJ5Lu02Z+dzICt1ZSXyXjd7dPV6snK5byczH96ulG426SHwWTX68uXyXfS6MW12Z/c7dH0+fG02J6t1ZXX68qQxm/G4rURV0dFAAALSUlEQVR4nO3d+XsV1R3....
4 respostas

Fala ai Matias, tudo bem? Acho que você poderia utilizar o FileReader para ler o conteudo do Blob e transformar em base64 com a função readAsDataURL.

Depois pegar esse base64 e passar para o src da imagem.

Espero ter ajudado.

solução!

Não sei se foi o ideal mas eu salvei os dados binários no backend já com base64 e quando retorno é só exibir no Angular acrescentando data:image/png;base64 no início dos dados da imagem, se for PNG.

Ou seja, não preciso converter e criar Blob, exibo direto no frontend.

Fala Matias, boa, é uma solução das N possíveis.

Normalmenet a gente salva o caminho da imagem no banco e depois utiliza o src passando o caminho para download.

Mas, essa abordagem também é valida.

Abraços e bons estudos.

Sim, existem várias soluções. Mas neste caso tem que ser o binário da imagem no banco de dados. O problema era exibir no frontend.