Trazer imagem(bytea) do banco de um servidor

11 respostas
L

Boa Noite galera…
preciso de ajuda…
Bem, tenho esta saída do banco num servidor e lanço esses dados
numa aplicação desktop

PrintWriter saida = response.getWriter();

saida.print(cliente.getEmail().toString()+"\n");
saida.print(cliente.getNick().toString()+"\n");
saida.print(cliente.getIp().toString()+"\n");
saida.print(cliente.getImage()+"\n");


até  tudo de boa... tudo está chegando no app

No app eu imprimo tudo de boa:

 resposta = respostaService.replaceAll("\n", "\n"); 
         String[] arrayDados = respostaService.split("\n");

        	 System.out.println("Email : " + arrayDados[0]);
        	 System.out.println("Nick : " + arrayDados[1]);
        	 System.out.println("Adress : " + arrayDados[2]);
        	 System.out.println("Pictures : " + arrayDados[3].getBytes());
    
   como são dados simples  blz... preciso converter esse bytea(bynaryData) para imagem
   e setar num label. pensei e trazer essas imagens para uma pasta do projeto...mas....
   se eu manter a conexão com banco local funciona... em rest  image null... 	 
   sendo que a imagem vem como bytea do banco num objeto cliente...
   quando tento converter para imagem ela  nulo!!!!!
  a imagem chega assim [B@3db80295 no mesmo formato que sai do servidor.
   
   podem me ajudar porfavor!!!!!


        		byte[] a = arrayDados[3].getBytes();
        		InputStream input = new ByteArrayInputStream(a);
        		 BufferedImage imagem = ImageIO.read(input);
        	    ImageIcon icon = new ImageIcon(imagem);	
        	    Image img = icon.getImage().getScaledInstance(60, 30, 25);
        	    Perfil_User.fotos.setIcon(new ImageIcon(img));

11 Respostas

L

o mais estranho que percebo é que os bytes são os
mesmos que saem da api…quando tento converter para bytes[] ele muda…

staroski

Esse é o toString() de um array de bytes.

Para obter um objeto Image a partir dos bytes lidos, faça assim:

byte[] bytes = arrayDados[3].getBytes();
Image imagem = ImageIO.read(new ByteArrayInputStream(bytes));
L

top vou testar…vlw

L

brother continua dando erro…e acho que percebi uma coisa!!!

quando esse conversão de String [] acontece ele muda o valor do Objeto
tipo assim: do servidor a imagem vem com valor [B@2cc497bc. quando eu converto para bytes[] ele muda esse valor para [B@7jk380vc dá erro de imagem nula… quando eu imprimo arrayDados[3] ele emite o mesmo valor de saída do servidor
como posso pegar esse valor direto com bytes[ ] na vinda do httpClient???

byte[] bytes = arrayDados[3].getBytes();
        	 Image imagem = ImageIO.read(new ByteArrayInputStream(bytes));
        	 Jlabel.setIcon(new ImageIcon(imagem)) ;
L

Tentei fazer assim :

byte[] bytes = arrayDados[3].getBytes();
BufferedImage imagem = ImageIO.read(new ByteArrayInputStream(bytes));

agora conseguir imprimir o mesmo array de bytes[] mas imagem continua dando null!!!

Lucas_Camara

Veja se é isso que tu tah querendo fazer:

Fiz usando jdk11

import java.awt.GridBagLayout;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main {

	public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame("Imagem");
		frame.setLayout(new GridBagLayout());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		HttpRequest request = HttpRequest.newBuilder()
			.uri(new URI("https://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Atletico_mineiro_galo.png/1200px-Atletico_mineiro_galo.png"))
			.GET()
			.build();
		
		HttpClient client = HttpClient.newHttpClient();
		
		HttpResponse<byte[]> response = client.send(request, BodyHandlers.ofByteArray());
		
		byte[] bytes = response.body();
		BufferedImage imagem = ImageIO.read(new ByteArrayInputStream(bytes));
		ImageIcon icon = new ImageIcon(imagem);
		JLabel lblImagem = new JLabel(icon);
		frame.add(lblImagem);
		
		frame.pack();
		frame.setVisible(true);
	}
}
staroski

Acho que você ainda não entendeu que isso aí é apenas o toString() de um array de bytes, não tem que converter nada, o objeto já é do tipo byte[].

L

show brother
… e isso seria oque?

BodyHandlers.ofByteArray()

L

é pois é…de qualquer jeito está chegando null
vou tentar salvar essas imagem em pasta no servido e tentar usar esse codigo acima

Lucas_Camara

A forma como o response será interpretado, com isso, vc jah irá obter do método já no tipo que precisa.

L

show meu brother…muito obrigado!!!

Criado 13 de outubro de 2021
Ultima resposta 15 de out. de 2021
Respostas 11
Participantes 3