cancel
Showing results for 
Search instead for 
Did you mean: 

upload fichero con webscript con backed java

mahurees
Champ in-the-making
Champ in-the-making
Hola a todos
Tengo un problema que no sé si tiene solución

Estoy usando una clase que extiende AbstractWebScript
y estoy intentando obtener los campos que me llegan de un jsp con enctype="multipart/form-data"

Consigo un objeto HttpServletRequest con el código:
httpServletReq = ((WebScriptServletRequest) req).getHttpServletRequest();
Pero a partir de aquí, no puedo obtener el fichero que quiero "uplodear":

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
   
List<E> items = upload.parseRequest(httpServletReq);
res.getWriter().write("no items: " + items.size());

La traza "no items" siempre devuelve 0

He conseguido obtener un objeto de la clase import org.alfresco.web.scripts.FormData;
formData = new FormData(httpServletReq);

Ejecuto el siguiente código para comprobar que es multiform y que están llegando los campos de mi jsp:
System.out.println("SubirFichero->execute->tiene titulo: " + formData.hasField("titulo"));
System.out.println("SubirFichero->execute->tiene descripcion: " + formData.hasField("descripcion"));
System.out.println("SubirFichero->execute->tiene identificadorNodo: " + formData.hasField("identificadorNodo"));
System.out.println("SubirFichero->execute->tiene nombre: " + formData.hasField("nombre"));
System.out.println("SubirFichero->execute->tiene fichero: " + formData.hasField("fichero"));

Todas las trazas me devuelven true, pero tanto si ejecuto httpServletReq.getAttribute("titulo") como si ejecuto
httpServletReq.getParameter("titulo"); me devuelve nulo

He intentado obtener todos los campos con un formdata.getFields(), pero se produce una excepción en esta llamada

Creo que a lo mejor si en vez de un con org.alfresco.web.scripts.FormData pudiese trabajar con el FormData del paquete
org.alfresco.web.scripts.servlet la cosa iría mejor, pero no consigo encontrar la manera de descargarme el paquete

¿Alguién podría echarme una mano?
PRIORIDADES
(1) ¿Existe alguna posibilidad de conseguir hacer un upload de un fichero con un backed java?
(2) ¿Cómo puedo conseguir el parquete org.alfresco.web.scripts.servlet?

Saludos y muchas gracias
3 REPLIES 3

palba
Champ in-the-making
Champ in-the-making
Hola.

Pues me encuentro en la misma situación que tú. Aunque he avanzado un poco más. Dices que necesitas obtener un FormData de la clase org.alfresco.web.scripts.servlet.FormData. Lo que no entiendo es qué problema tienes para usarlo. Eso de que "no puedes descargartelo"… ¿te refieres a que no encuentras el jar que contiene dicha clase?. Se trata de alfresco-webscript-framework.jar  (lo puedes encontrar en el directorio lib de la instalación de alfresco, al menos en la versión labs 3b).

Teniendo ese jar en el classpath de compilación, lo siguiente debería funcionar:

      HttpServletRequest httpServletReq = ((WebScriptServletRequest) req).getHttpServletRequest();
      org.alfresco.web.scripts.servlet.FormData formData = new org.alfresco.web.scripts.servlet.FormData(httpServletReq);

      org.alfresco.web.scripts.servlet.FormData.FormField[] fields=formData.getFields();
      
      for (int i=0;i<fields.length;i++){
         org.alfresco.web.scripts.servlet.FormData.FormField field=fields[i];
         System.err.println("–>Field name: "+field.getName());
         if (field.getIsFile()){
            System.err.println("–>Filename: "+field.getFilename());
            System.err.println("–>Size: "+field.getContent().getSize());
         }
      }

Sin embargo, el tamaño del array fields es siempre 0…

Ahora estoy mirando cómo obtener los elementos directamente del request, ignorando las clases de Alfresco, pero no sé si lo conseguiré

jpbarba_3024
Champ in-the-making
Champ in-the-making
Hola,
sabeis alguna forma de poder envíar un fichero a través de un applet insertado en un dialogo?

haroldvera
Champ in-the-making
Champ in-the-making
estoy usando alfresco C 3.2 y las siguientes lineas no funcionan para mi:

HttpServletRequest httpServletReq = ((WebScriptServletRequest) req).getHttpServletRequest();
      org.alfresco.web.scripts.servlet.FormData formData = new org.alfresco.web.scripts.servlet.FormData(httpServletReq);
      org.alfresco.web.scripts.servlet.FormData.FormField[] fields=formData.getFields();

formData.getFields().length siempre es cero.

sin embargo estas si funcionan,

Object content = req.parseContent();
FormData formData = (FormData)content;