Hola a todos,
Tengo un problema con una cuestión de subidas de ficheros dentro de mi aplicación web en java-jsp, os cuento el entorno y que programas utilizo:
Eclipse - IDE
Tomcat 7 para desplegar mi war
Mysql 5 como base de datos
Tipo de proyecto:Dinamic Web Proyect
El problema es que dentro de mi propio proyecto, o sea en la carpeta WebContent creo una carpeta donde quiero grabar todos los ficheros que subo desde mi aplicacion web, pero me he encontrado el problema que ha veces se graban y a veces no, dandome el siguiente error cuando no se graba, parece que el tomcat 7 me cambia el directorio real por un directorio temporal, algunas veces si y otras veces no, y no entiendo que pasa:
Error que da cuando no se graba:
java.io.FileNotFoundException: C:\Users\aholguin\AppData\Local\Temp\upload_5bfcce d3_13c6177077c__8000_00000002.tmp (El sistema no puede encontrar el archivo especificado)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at org.apache.tomcat.util.http.fileupload.disk.DiskFi leItem.write(DiskFileItem.java:455)
at Servlets.servletMensajes.processRequestLoadFile(se rvletMensajes.java:866)
at Servlets.servletMensajes.processRequestGrabaMensaj eConductor(servletMensajes.java:259)
at Servlets.servletMensajes.processRequest(servletMen sajes.java:107)
at Servlets.servletMensajes.doPost(servletMensajes.ja va:56)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBas e.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(A ccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.p rocess(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnect ionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$SocketProce ssor.run(AprEndpoint.java:1805)
at java.util.concurrent.ThreadPoolExecutor.runWorker( Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (Unknown Source)
at java.lang.Thread.run(Unknown Source)
Mi codigo para la subida :
private boolean processRequestLoadFile(HttpServletRequest request,HttpServletResponse response, String codMensaje, String nombre) throws ServletException, IOException
{
boolean isMultipart =ServletFileUpload.isMultipartContent(request);
String codmensaje=codMensaje;
boolean rutaCreada=true;
boolean rutaAppCreada=true;
String raiz = Util.leerDirectorio(Atributos.PATHRAIZ);
String rutafichero = Util.leerDirectorio(Atributos.PATHFICHEROUPLOAD);
String nombrefichero="";
String extfichero="";
File path_Unidad = new File(raiz+"\\"+rutafichero+"\\"+nombre);
String root = request.getServletContext().getRealPath("/");
log.info("root:"+root);
String ruta=root+rutafichero+"\\"+nombre;
File path_App = new File(ruta);
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while (iterator.hasNext()) {
FileItem item = (FileItem) iterator.next();
if (!item.isFormField() && !item.getName().equals(""))
{
String fileName = item.getName();
//if(item.getSize()<6200000)
//{
extfichero=fileName.substring(fileName.indexOf("." ));
nombrefichero=fileName.substring(0, fileName.indexOf("."))+"_"+codmensaje;
if (!path_Unidad.exists())
{
rutaCreada = path_Unidad.mkdirs();
}
if(rutaCreada)
{
File fichero_Unidad = new File(path_Unidad +"\\"+nombrefichero+extfichero);
item.write(fichero_Unidad);
log.info("Fichero creado OK:"+path_Unidad +"\\"+nombrefichero+extfichero);
}
if(!path_App.exists())
{
rutaAppCreada=path_App.mkdirs();
}
if(rutaAppCreada)
{
//String path_completo = request.getServletContext().getRealPath("/")+rutafichero+"\\"+nombre+"\\"+ nombrefichero +extfichero;
File fichero_app = new File(path_App +"\\"+ nombrefichero +extfichero);
item.write(fichero_app);
log.info("Fichero creado OK:"+path_App +"\\"+nombrefichero+extfichero);
}
//}else return false;
}
}
} catch (FileUploadException e) {
log.error(e.getMessage());
e.printStackTrace();
return false;
} catch (Exception e) {
log.error(e.getMessage());
e.printStackTrace();
return false;
}
}
return true;
}
Muchas gracias por todo, espero que alguien me pueda ayudar, por que me es necesario para acabar un proyecto.
Saludos