enctype="multipart/form-data" input type=text upload files

musa
15 de Enero del 2010
!Hola ¡

De un formulario de tipo enctype="multipart/form-data" , tengo que mandar dos valores a un servlet de upload de archivos. Uno de un iput type text y el archivo( el input type file).
Lo de subir el archivo al servidor ya lo he solucionado, el problema es que el valor del input type text siempre llega null. Mejor dicho cuando incluyó el input type text ya no funciona el upload y me marca null al llegar al servlet.
Sé que en este foro algunos compañeros ya han puesto solución a tal problema. Sin embargo en el sig código siempre me da null. Espero que alguien me pueda ilustrar con algun consejo ya que de plano ya llevo mucho tiempo en el problema:
El código que tengo es:
public class Upload extends HttpServlet {
void depura(String cadena)
{
System.out.println("El error es " + cadena);
}

public boolean procesaFicheros(HttpServletRequest req, PrintWriter out ) {
try
{
// Check that we have a file upload request
boolean isMultipart = FileUpload.isMultipartContent(req);
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List /* FileItem */ items = upload.parseRequest(req);

if(items == null)
{
depura("La lista es nula");
return false;
}

out.print("<br>El número de ficheros subidos es: " + items.size());
// Iteramos por cada fichero
Iterator i = items.iterator();
FileItem actual = null;
depura("estamos en la iteración");

while (i.hasNext())
{
actual = (FileItem)i.next();
if( actual.getFieldName().equals("ID") )
{

// Buscamos campos de formulario tipo text, input.
if (actual.isFormField())
{
// obtenemos el nombre del campo y su valor
String nombreCampo = actual.getFieldName();
System.out.println("NOM"+nombreCampo);
String valorCampo =actual.getString();
System.out.println("VAL"+valorCampo);


}
}

else
{

System.out.println("Estamos en el while");

String fileName = actual.getName();
out.println("<br>Nos han subido el fichero" + fileName);

// construimos un objeto file para recuperar el trayecto completo
File fichero = new File(fileName);
depura("El nombre del fichero es " + fichero.getName());

// nos quedamos solo con el nombre y descartamos el path
fichero = new File("C:\Proyectos\PRUEBAS\" + fichero.getName());

// escribimos el fichero colgando del nuevo path
actual.write(fichero);
//}


}
}
}
catch (Exception e)
{
depura("Error de Aplicación " + e.getMessage());
return false;
}


return true;
}

Andrew
15 de Enero del 2010
Yo tengo justamente el mismo problema, el nombre del fichero viene null, si resuelves este problema por favor postealo aquí para que nos sirva a todos.
Gracias! :D

Edwin
15 de Enero del 2010
Holas, aca tengo este codigo a mi me funciona, espero les sirva, favor escribanme si les sirvio.

DiskFileUpload fu = new DiskFileUpload();

//setSizeMax: Setea el maximo tamaño permitido para el archivo a cargar. Si es negativo, no hay maximo.
fu.setSizeMax( UConstante.MAX_FILE_UPLOAD_SIZE );
//setSizeThreshold: Setea el tamaño de threshold por medio del cual los archivos son escritos directamente a disco.
fu.setSizeThreshold( UConstante.SIZE_THRESHOLD );
//setRepositoryPath: Setea la ubicacion usada para guardar temporalmente archivos mas grandes que lo configurado como tamaño de threshold.
fu.setRepositoryPath(System.getProperty("java.io.tmpdir"));
//parseRequest: Procesa un RFC 1867 compliant multipart/form-data stream.
List fileList = fu.parseRequest(request);


for (Iterator i = fileList.iterator(); i.hasNext(); )
{
FileItem fi = (FileItem)i.next();

if ( ! fi.isFormField() ) // es un archivo
{
if (fi.getSize() < 1 )
{
try{
throw new Exception("No se ha recibido ningun archivo (No file was uploaded) ");
}
catch(Exception e) {
String mensaje= "Error";
response.sendRedirect("../carga/cp_carga_archivo_formulario.jsp?mensaje=" + mensaje);
return;
}
}
uploadedFileName = fi.getName();
uploadedFileStream = fi.getInputStream();

}
}//end for