Guardar archivo cargado

Silmarilian
09 de Enero del 2009
Hola a todos

Estoy haciendo una página web y necesito cargar archivos (fotos) y guardarlos en una ruta relativa. Estoy haciendo pruebas y si pongo toda la ruta o los guardo en c: funciona perfectamente (puede que a alguien le sirva el siguiente código) pero yo necesito que me los guarde en la carpeta de imágenes donde está todo el proyecto (/img/fotos/) y así me da un error que dice que no encuentra la ruta especificada. Si alguien puede ayudarme se lo agradecería mucho.

Este es el código:

<html>
<head>
<title>Prueba</title>
</head>

<body>
<h1>Cargar fichero</h1>

<form action="http://localhost:8084/ProyectoGuarderia/servletCargarFichero" enctype="multipart/form-data" method="post">

Fichero: <input type="file" name="fichero" size="70" accept="text/plain;image/jpeg">
<br /><br />
<input type="submit" name="enviar" value="Enviar">
</form>
</body>
</html>

--------------------------------------------------------------------------------------------------------------------------

package packGuarderia;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.FilenameUtils;
import java.util.*;
import java.io.File;
import java.lang.Exception;

public class servletCargarFichero extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
response.setContentType("application/vnd.wap.xhtml+xml");
response.setContentType("text/html");

out.println("<html>");
out.println("<head>");
out.println("<title>Prueba</title>");
out.println("</head>");

out.println("<body>");
out.println("<h1>Datos recibidos en el servidor</h1>");
out.println("<hr/>");
out.println("<p>");


/* Miramos si la petición HTTP está codificada en formato multiparte.
Esto es para que lea los parametros y el fichero a la vez. */
try{
if (ServletFileUpload.isMultipartContent(request)){
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());

/* Al ser multiparte, con servletFileUpload.parseRequest(request) recibimos una lista de FileItem. */
List fileItemsList = servletFileUpload.parseRequest(request);

String optionalFileName = "";

/* FileItem es un campo simple, del tipo nombre-valor*/
FileItem fileItem = null;

Iterator it = fileItemsList.iterator();
String fieldName=null;
String value=null;
while (it.hasNext()){
FileItem fileItemTemp = (FileItem)it.next();
if (fileItemTemp.isFormField()){
fieldName=fileItemTemp.getFieldName();
value=fileItemTemp.getString();

if (fileItemTemp.getFieldName().equals("filename"))
optionalFileName = fileItemTemp.getString();
}
else
fileItem = fileItemTemp;
}

if (fileItem!=null){
// Nombre del archivo a cargar
String fileName = fileItem.getName();


out.println("<b>Info del fichero cargado:</b><br/>");

/*Nos dice el tipo de fichero. Ej.: .jpg (image/jpge), .txt (text/plain) ...)*/

out.println("Tipo de fichero: "+fileItem.getContentType()+"<br/>");
out.println("Nombre del campo: "+fileItem.getFieldName()+"<br/>");
out.println("Nombre del fichero: "+fileName+"<br/>");
out.println("Tamaño del fichero: "+fileItem.getSize()+"<br/><br/>");


/* Guardar el fichero cargado si su tamaño es mayor que 0. */
if (fileItem.getSize() > 0){
if (optionalFileName.trim().equals(""))
fileName = FilenameUtils.getName(fileName);
else
fileName = optionalFileName;

String dirName = "/img/fotos/";

File saveTo = new File(dirName + fileName);

out.println("GUARDADO EN: <b>"+saveTo+"</b>");
try {
fileItem.write(saveTo);

out.println("<b>El fichero cargado se ha guardado correctamente.</b>");

} //try
catch (Exception e){
out.println("<br/>"+e.getMessage()+"<br/><br/>");
out.println("<b>Ha ocurrido un error cuando intentábamos guardar el fichero cargado.</b>");
}
} // if
} // if
} // while
} //try
catch(Exception e)
{
}
out.println("</p>");
out.println("</body>");
out.println("</html>");
}
}