Pessoal já procurei aqui pelo forum sobre gravação e recuperação de imagens, porém, todos dizem pra fazer com jsp + servlets. O que eu preciso é fazer só com JSP. Eu fiz isso:
Para inserir:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page language="java" %>
<%@ page import="java.awt.image.*"%>
<%@ page import="javax.imageio.ImageIO"%>
<%@ page import="java.awt.image.BufferedImage,java.util.*"%>
<%@ page import="java.awt.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.File"%>
<%@ page import="java.util.*,com.oreilly.servlet.MultipartRequest"%>
<html>
<%
try{
String filename = "";
MultipartRequest multi = new MultipartRequest(request,".",5*1024*1024);
Enumeration files = multi.getFileNames();
File f = null;
while(files.hasMoreElements()){
String name = (String)files.nextElement();
filename = multi.getFilesystemName(name);
String type = multi.getContentType(name);
f = multi.getFile(name);
System.out.println("O arquivo é: "+f);
}
Connection con = null;
String userName = "sa";
String password = "";
try{
out.println("Verificando se o driver esta instalado...");
Class.forName("net.sourceforge.jtds.jdbc.Driver");
out.println("Driver está instalado e funcionando...");
}catch(ClassNotFoundException ex){
out.println("Driver JDBC-JTDS não encontrado!!");
}
catch(Exception ex){
System.out.println("Problemas na conexão com o DRIVER JTDS...");
System.out.println(ex.toString());
}
try{
out.println("Conectando ao Banco de Dados...");
con = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.0.4:1433/;DatabaseName=Homolog",userName,password);
}catch (SQLException ex){
out.println("Problemas na conexão com a fonte de dados!");
out.println(ex.toString());
}
Statement stmt = con.createStatement();
InputStream is = new FileInputStream(f);
byte b[] = new byte[is.available()];
is.read(b);
int flag = 0;
try{
//Pega o ID MAX
String IDsql = "select MAX(ID)+1 as id from imagens";
ResultSet rs = stmt.executeQuery(IDsql);
rs.next();
String id = rs.getString("id");
String nome = "Teste"+id;
//Faz insert
String sql = "INSERT into dbo.imagens(id,nome,imagem) values('"+ id + "','"+ nome +"','" + b + "')";
System.out.println(sql);
stmt.execute(sql);
flag = 1;
}
catch(Exception e){
e.printStackTrace();
}
//Confirma a execução das queryes
if(flag == 1){
System.out.println("Query Executada");
}
stmt.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
catch(Exception e){
e.printStackTrace();
}
out.println("Imagem Adicionada");
%>
</html>
Para recuperar e exbir numa tag IMG:
<%@ page contentType="text/html"%>
<%@ page pageEncoding="UTF-8"%>
<%@ page language="java" %>
<%@ page import="java.awt.image.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="java.io.File"%>
<%@ page import="javax.imageio.ImageIO"%>
<%@ page import="java.awt.image.BufferedImage,java.util.*"%>
<%@ page import="java.awt.*"%>
<html>
<head><title>JSP Page</title></head>
<body>
<table border="1">
<%
try{
//int returnValue = 0;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
OutputStream os = null;
//Blob blob = null;
//String text;
String userName = "sa";
String password = "";
text = request.getParameter("text");
try{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.0.4:1433;DatabaseNAme=Homolog",userName,password);
InputStream sImage;
String sql = "SELECT imagem as imagem FROM imagens where id = (select max(id) from imagens)";
con.setAutoCommit(false);
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
int i = 1;
if(rs.next()){
String len1 = rs.getString("imagem");
int len = len1.length();
byte [] b = new byte[len];
sImage = rs.getBinaryStream("imagem");
response.setContentType(rs.getString("imagem"));
int index = sImage.read(b, 0, len);
String caminho = "C:/imagem/img"+i+".JPG";
OutputStream outImg = new FileOutputStream(caminho);
while (index != -1){
outImg.write(b, 0, index);
index = sImage.read(b, 0, len);
out.println("<tr><td>");
out.println(index);
out.println("</td>");
out.println("<td>");
out.println(outImg);
out.println("</td></tr>");
out.println("<tr><td>");
out.println("<img src='"+caminho+"'>");
out.println("</td></tr>");
}
outImg.close();
i++;
}
else{
returnValue = 1;
}
}
catch(Exception e){
e.printStackTrace();
}
}
catch(Exception ex){
ex.printStackTrace();
}
%>
</table>
</body>
</html>
Na verdade eu fui pegando esses codigos de varias páginas e fui juntando. Estou começando em jsp agora.Essa aplicação consegue gravar o banco. Na hora de recuperar ele cria o arquivo JPG no C:/imagem, mas esse arquivo é vazio. Eu não sei se o erro está na hora que ele grava ou na hora que ele recupera…
alguém poderia me ajudar?
Obrigado!