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