GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Trazer imagem(bytea) do banco de um servidor

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é aí 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...só preciso converter esse bytea(bynaryData) para imagem
   e setar num label.Já pensei e trazer essas imagens para uma pasta do projeto...mas....
   se eu manter a conexão com banco local funciona...já em rest dá image null... 	 
   sendo que a imagem vem como bytea do banco num objeto cliente...
   quando tento converter para imagem ela dá 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));

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

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));

top vou testar…vlw

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)) ;

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!!!

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);
	}
}

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[].

show brother
… e isso seria oque?

BodyHandlers.ofByteArray()

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

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

show meu brother…muito obrigado!!!

//