Alguem sabe como fazer upload e carregar imagens do mysql?
22 respostas
imagesmysqlspringmvc
D
Danyllo_Linhares
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.
D
Danyllo_Linhares
é exatamente essa a dificuldade kkk
sou iniciante
estou procurando desde ontem
D
Danyllo_Linhares
publicvoidadiciona(Cadastrocadastro)throwsSQLException{Conexaoconn=newConexao();FileInputStreamfis=null;Stringsql="insert into cadastro(nome,email,telefone,imagem) values (?,?,?,?)";try{imagem=cadastro.getImagem();fis=newFileInputStream(imagem);PreparedStatementps=conn.getConexao().prepareStatement(sql);// impede sql injectps.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(Exceptione){System.out.println(e);}}
D
Danyllo_Linhares
so que esta dando este erro:
java.io.FileNotFoundException: 1Gd.jpg (O sistema não pode encontrar o arquivo especificado)
D
darlan_machado
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?
S
senadiego
Dá uma olhada nesse código que fiz, acho que vai te dar um caminho
D
Danyllo_Linhares
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
S
senadiego
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=newFileChooser();fileChooser.getExtensionFilters().addAll(newExtensionFilter("imagens","*.jpg","*.png"));file=fileChooser.showOpenDialog(panePrinc.getScene().getWindow());if(file!=null){//pega o caminho da foto e seta o mesmo em uma labellblCaminho.setText(file.getAbsolutePath());image=newImage(file.toURI().toString());//seta a imagem escolhida em um imageViewimgView.setImage(image);try{fis=newFileInputStream(file);}catch(FileNotFoundExceptione){e.printStackTrace();}}}
eu uso para pegar o caminho da foto e fazer umas coisa mais
D
Danyllo_Linhares
publicvoidadiciona(Cadastrocadastro)throwsSQLException{Conexaoconn=newConexao();FileInputStreamfis=null;Stringsql="insert into cadastro(nome,email,telefone,imagem) values (?,?,?,?)";try{Fileimage=newFile("C:/Users/dan/Desktop/imagens/1Gd.jpg");//PARA FAZER TESTE DE UPLOAD COLOCANDO O DIRETÓRIO MANUALMENTEimagem=cadastro.getImagem();Stringloc_imagem=imagem.getAbsolutePath();//TENTATIVA DE PEGAR O DIRETÓRIO, POREM SO MOSTRA A PASTA DO TOMCATfis=newFileInputStream(image);PreparedStatementps=conn.getConexao().prepareStatement(sql);// impede sql injectps.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(Exceptione){System.out.println(e);System.out.println(imagem.getParentFile());}}
Stringsql="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 imagemFileimagem=newFile("C:/Users/dan/Desktop/imagens/1Gd.jpg");//PARA FAZER TESTE DE UPLOAD COLOCANDO O DIRETÓRIO MANUALMENTEimagem=cadastro.getImagem();Stringloc_imagem=imagem.getAbsolutePath();//TENTATIVA DE PEGAR O DIRETÓRIO, POREM SO MOSTRA A PASTA DO TOMCATfis=newFileInputStream(image);PreparedStatementps=conn.getConexao().prepareStatement(sql);// impede sql injectps.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(Exceptione){System.out.println(e);System.out.println(imagem.getParentFile());}
}
acho que é erro de digitação
D
Danyllo_Linhares
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
S
senadiego
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());
D
darlan_machado
FileChooser para uma aplicação web com spring mvc?
Essa é nova para mim…
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.
D
Danyllo_Linhares
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
D
darlan_machado
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.
D
Danyllo_Linhares
onde posso aprender isso?
D
darlan_machado
O spring já oferece vários tutoriais para isso.
Dá uma olhada nisso.
De qualquer forma, você recebe um objeto de MultipartFile. Os objetos desta classe tem um atributo que é a representação destes bytes, que é o getInputStream() (veja mais)
A partir daí é contigo.
D
Danyllo_Linhares
nao to conseguindo de jeito nenhum
se eu enviar o meu projeto
tem como vc me ajudar?
D
darlan_machado
Já disse para fazer por partes, você disse que consegue o upload.
Qual o problema agora?