Alguem sabe como fazer upload e carregar imagens do mysql?

estou fazendo um projeto da faculdade em que terei que fazer o uso de imagens
so que não estou conseguindo gravar e nem exibir a imagem
estou utilizando um longblob na imagem no mysql

o problema é transfomar os bytes da imagem(blob) em File e vice versa

Como está fazendo?
Basicamente, você vai ler o array de bytes que corresponde ao arquivo da imagem e gravá-lo na coluna respectiva. Eu não usaria longblob, um blob simples resolve.
Para apresentar a imagem, basta ler o array de bytes e salvar/enviar como imagem.

é exatamente essa a dificuldade kkk
sou iniciante
estou procurando desde ontem

    public void adiciona(Cadastro cadastro) throws SQLException{
        Conexao conn = new Conexao();
        FileInputStream fis=null;
        String sql = "insert into cadastro(nome,email,telefone,imagem) values (?,?,?,?)";
        try {
            imagem = cadastro.getImagem();
            fis=new FileInputStream(imagem);
            PreparedStatement ps = conn.getConexao().prepareStatement(sql);// impede sql inject
            ps.setString(1, cadastro.getNome());
            ps.setString(2,cadastro.getEmail());
            ps.setInt(3, cadastro.getTelefone());
            
            ps.setBinaryStream(4, (InputStream)fis,(int) (imagem.length()));
            
            
          
            ps.execute();
           
        } catch (Exception e) {
            System.out.println(e);
          
        }
            
       
        
    }

so que esta dando este erro:

java.io.FileNotFoundException: 1Gd.jpg (O sistema não pode encontrar o arquivo especificado)

Essa exceção é lançada quando o java não encontra o arquivo que você quer ler.
Tem certeza que cadastro.getImagem() está retornando o path correto da imagem?

Dá uma olhada nesse código que fiz, acho que vai te dar um caminho

nao estou conseguindo fazer ele ler o caminho da imagem
ele esta indo para uma pasta do tomcat

por exemplo

eu faço o upload de uma imagem que tem como caminho:
c:/users/usuario/deskop/imagem.jpg

so que ele mostra esse caminho

c:/tomcat/bin/imagem.jpg

mas qual é o codigo que vc usa para pegar o caminho da imagem??

dá uma olhada nesse codigo

private void buscarFotos() {

	imgView.setImage(null);
	
	fileChooser = new FileChooser();
	fileChooser.getExtensionFilters().addAll(new ExtensionFilter("imagens", "*.jpg", "*.png"));
	
	file = fileChooser.showOpenDialog(panePrinc.getScene().getWindow()); 
	
	if (file != null) {

		//pega o caminho da foto e seta o mesmo em uma label
		lblCaminho.setText(file.getAbsolutePath());
		
		image = new Image(file.toURI().toString());

                //seta a imagem escolhida em um imageView
		imgView.setImage(image);
		
		try {
			fis = new FileInputStream(file);
		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}

eu uso para pegar o caminho da foto e fazer umas coisa mais

 public void adiciona(Cadastro cadastro) throws SQLException{
    Conexao conn = new Conexao();
    FileInputStream fis=null;
    
    String sql = "insert into cadastro(nome,email,telefone,imagem) values (?,?,?,?)";
    try {
    
        File image= new File("C:/Users/dan/Desktop/imagens/1Gd.jpg");//PARA FAZER TESTE DE UPLOAD COLOCANDO O DIRETÓRIO MANUALMENTE
        imagem = cadastro.getImagem();
        String loc_imagem = imagem.getAbsolutePath();//TENTATIVA DE PEGAR O DIRETÓRIO, POREM SO MOSTRA A PASTA DO TOMCAT
        fis=new FileInputStream(image);
        PreparedStatement ps = conn.getConexao().prepareStatement(sql);// impede sql inject
        ps.setString(1, cadastro.getNome());
        ps.setString(2,cadastro.getEmail());
        ps.setInt(3, cadastro.getTelefone());
        
        ps.setBinaryStream(4, (InputStream)fis,(int) (image.length()));
        
        
   
        ps.execute();
         System.out.println(loc_imagem);
       System.out.println(image.getParent());
        
    } catch (Exception e) {
        System.out.println(e);
       
         System.out.println(imagem.getParentFile());
    }
        
   
    
}

public void adiciona(Cadastro cadastro) throws SQLException{
Conexao conn = new Conexao();
FileInputStream fis=null;

String sql = "insert into cadastro(nome,email,telefone,imagem) values (?,?,?,?)";
try {

   //no seu codigo a instacia que vc criou possui o nome de image e abaixo vc coloca imagem
    File imagem= new File("C:/Users/dan/Desktop/imagens/1Gd.jpg");//PARA FAZER TESTE DE UPLOAD COLOCANDO O DIRETÓRIO MANUALMENTE
    imagem = cadastro.getImagem();
    String loc_imagem = imagem.getAbsolutePath();//TENTATIVA DE PEGAR O DIRETÓRIO, POREM SO MOSTRA A PASTA DO TOMCAT
    fis=new FileInputStream(image);
    PreparedStatement ps = conn.getConexao().prepareStatement(sql);// impede sql inject
    ps.setString(1, cadastro.getNome());
    ps.setString(2,cadastro.getEmail());
    ps.setInt(3, cadastro.getTelefone());
    
    ps.setBinaryStream(4, (InputStream)fis,(int) (image.length()));
    
    

    ps.execute();
     System.out.println(loc_imagem);
   System.out.println(image.getParent());
    
} catch (Exception e) {
    System.out.println(e);
   
     System.out.println(imagem.getParentFile());
}

}

acho que é erro de digitação

pior q nao
nesse codigo o image é o que eu defini manualmente a sua localizaçao

e o imagem é oq eu estou tentando pegar atravez do upload do arquivo
note que a string loc_imagem mostra a localizaçao que eu estou tentando pegar no caso a imagem

ainda nao setei o imagem como local pois diz que esse arquivo nao existe
estou tentando pegar o diretorio correto para depois implementar FileInputStream

tenta ultilizar o fileChosser

ai a partir dele vc pega o caminho da imagem

//pega o caminho da foto e seta o mesmo em uma label
lblCaminho.setText(file.getAbsolutePath());

FileChooser para uma aplicação web com spring mvc?
Essa é nova para mim…

voce sabe como darlan?:grinning::grinning:
eu to desesperado kkk

ve se isso ajuda

https://www.mkyong.com/spring-mvc/spring-mvc-file-upload-example/

Primeiro passo é testar isoladamente cada situação.
Teste o upload, armazenando o arquivo no servidor, em algum diretório pré definido.
Depois, teste a conversão em array de bytes e armazenamento no banco de dados, lendo de algum diretório como C:\temp, por exemplo.

isso esta dando certo
a única dificuldade é a captura do diretório

percebi que quando eu vou no setImagem e executo um println
ele tmbem mostra como se a imagem estivesse na pasta do tomcat

O que acontece é que você vai precisar do contexto (HttpServletContext) para saber onde está (afinal, poe ser que você execute em um servlet container ou application server que não o tomcat e, talvez, em uma máquina não windows).
Porém, você já está fazendo o upload e o upload, em geral, já contém um array de bytes.
Seria ideal pegar esse array e utilizar o mesmo para gravar na base de dados.

onde posso aprender isso?