Buenos dias a todos,
estoy realizando una aplicacion donde en el backend quiero guardar la imagenes en una base de datos.
Guardar ya me guarda las imagenes cuando pongo en File fichero = new File(path);
en la variable path manualmente la ruta de la carpeta hasta el fichero.
Pero claro yo lo que quiero es que desde el equipo cliente que sea carge su ruta absoluta en el .jsp y la pase al servlet para que este guarde la imagen en la BBDD.
No quiero cargar la imagen en el servidor con apache.commons(entre otras porque tengo la duda, solo la carga ó tambien la guarda en el servidor? porque si la guarda lo veo tonteria estar almacenando por duplicado imagenes)
Paso el codigo, gracias :)
package Imagenes;
/*son las librerias para ayudar al despliegue de servlets*/
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/*son las librerias para ejecutar todas las sentencias sql y configurar el driver de jdbc*/
import java.sql.*;
import java.io.File;
import java.io.FileInputStream;
@WebServlet(urlPatterns = {"/subirImagen"})
public class subirImagen extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String d = "com.mysql.jdbc.Driver";
Class.forName(d);
String sURL = "jdbc:mysql://localhost:3306/imagenes";
Connection Conexion;
Conexion = DriverManager.getConnection(sURL, "root", "oldViews17");
PreparedStatement misentencia;
misentencia = Conexion.prepareStatement("INSERT INTO imagenes VALUES (?,?,?)");
Conexion.setAutoCommit(false);
String Nombre = request.getParameter("Nombre");
String Descripcion = request.getParameter("Descripcion");
String imagen = request.getParameter("Imagen");
File fichero = new File(imagen);
out.println("la ruta absoluta es" + fichero.getAbsolutePath());
//ruta puede ser: "/home/cmop/Desktop/1.jpg"
FileInputStream fis = new FileInputStream(imagen);
//Lo convertimos en un Stream
//Asignamos el Stream al Statement
misentencia.setString(1, Nombre);
misentencia.setString(2, Descripcion);
misentencia.setBinaryStream(3, fis, (int) imagen.length());
misentencia.executeUpdate();
Conexion.commit();
out.println("la variable nombre tiene el nombre:" + request.getParameter("Nombre"));
out.println("Datos almacenados de forma exitosa");
} catch (SQLException ex) {
out.println(ex);
} catch (ClassNotFoundException ex) {
out.println(ex);
}
}
}
Pego el codigo del JSP por si sirve de alguna idea:
<jsp:useBean id="imagen" class="Imagenes.Imagen"/>
<jsp:setProperty name="imagen" property="*" />
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form method="post" action="subirImagen">
<label>Nombre:</label>
<input type="text" id="txtNombreImagen" name="Nombre">
<label>Descripción:</label>
<input type="text" id="txtDescripcion" name="Descripcion">
<label id='label'>Imagen: </label>
<input type="Hidden" id="vaya" name="Ruta" >
<input type="file" id="txtDescripcion" name="Imagen">
<input type="submit" id="idEnviar" value="Enviar">
</form>
</body>
</html>