Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Multipart/Form-data y controlador

Buenas.

Estoy intentando hacer una pequeña aplicación en la que un formulario de tipo Multipart envía la petición a un controlador y este la redirige al servlet que la procesa. Para esto uso un campo oculto con el nombre form en el que indico qué servlet usar.
Pues bien, si uso Tomcat 7 no tengo ningún tipo de problema. Lo malo es que tengo que usar Tomcat 6 y aquí no logro hacer que funcione.
He probado con 2 librerías. Fileupload de Apache y una que me he descargado de OReilly, con ambas en el controlador puedo obtener el parámetro form y averiguar a qué servlet redirigir, pero en el servlet no puedo volver a procesar el formulario, es como si en el controlador se "eliminaran" los parámetros.

El código para la librería de OReilly es:

String tipo = request.getContentType().toLowerCase();

if (tipo.contains("multipart/form-data")) {

com.oreilly.servlet.MultipartRequest multi = new MultipartRequest(request, context.getRealPath("/")+"WEB-INF/classes");
form = multi.getParameter("form");

} else {

form = request.getParameter("form");
}

Para Apache:


if (ServletFileUpload.isMultipartContent(request)) {

try {

DiskFileItemFactory factory = new DiskFileItemFactory();

// Tamaño maximo para alojar en memoria
factory.setSizeThreshold(4096);
factory.setRepository(new File(context.getRealPath("/")+"WEB-INF/classes"));

ServletFileUpload upload = new ServletFileUpload(factory);

// Tamaño maximo permitido
upload.setSizeMax(10000000);

List<?> items = upload.parseRequest(request);

// Procesamos los items subidos para encontrar el fichero
Iterator<?> iter = items.iterator();

while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// Si NO es un campo del formulario es un fichero
if (item.isFormField()){
if (item.getFieldName().equals("form")){
form = item.getString();
}
}
}

} catch (FileUploadException e) {
Logger.getLogger(ControladorPrincipalServlet.class.getName()).log(Level.SEVERE, "Fallo al subir el fichero.", e);
form = null;
}
} else {
form = request.getParameter("form");
}

Y para redirigir:

if (form.equals("guardarFicheroServlet")) {
RequestDispatcher dispatcher = context.getNamedDispatcher("GuardarFicheroServlet");
dispatcher.forward(request, response);
}

¿Sabe alguien cómo puedo arreglar esto?

Muchas gracias y un saludo.

mayo 7, 2012 | Registered Commenterpilli