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.
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?
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 {
//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());
}
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
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.
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.