Configuración de un recurso para recibir partes multipart/form-data de envío de un formulario HTML

Los formularios HTML que transmiten datos de archivo, deben configurarse con el método POST y la acción "multipart/form-data". Estos datos los puede recibir de dos formas distintas el método de recursos JAX-RS que los acepta con la implementación IBM Java™ API for RESTful Web Services (JAX-RS).

Acerca de esta tarea

Esta tarea proporciona instrucciones para configurar un método JAX-RS para consumir y producir multipart/form-data. En el ejemplo siguiente se muestra un formulario HTML:
<form action="http://www.example.com/" method="POST" enctype="multipart/form-data">
    <input type="text" name="fileid" />
    <br />
    <input type="text" name="description" />
    <br />
    <input type="file" name="thefile" />
    <br />
    <input type="submit" name="submit" value="submit"/>
</form>
Puede implementar IBM JAX-RS para recibir los datos en partes, de modo que pueda procesar estas partes por su cuenta, si es necesario.

Procedimiento

  1. Cree un método de recursos. Debe declarar el método de recurso siguiente para recibir y repetir los datos de varias partes/formulario de un HTTP POST:
    package com.example.jaxrs;
    @POST
    @Consumes("multipart/form-data")
    @Produces("multipart/form-data")
    
    public Response postFormData(@FormParam("fileid") int theFileid,
                                 @FormParam("description") String theDescription,
                                 @FormParam("thefile") File theFile) {
        // repetir lo que hay en el formulario
        BufferedOutMultiPart bomp = new BufferedOutMultiPart();
        OutPart op = new OutPart();
        op.setBody(theFile);
        op.setContentType(MediaType.TEXT_PLAIN);  // u otro tipo apropiado, basado en el archivo recibido
        bomp.setLocationHeader("thefile");
        bomp.addPart(op);
        op = new OutPart();
        op.setBody(theDescription);
        op.setContentType(MediaType.TEXT_PLAIN);
        bomp.setLocationHeader("description");
        bomp.addPart(op);
        BufferedOutMultiPart bomp = new BufferedOutMultiPart();
        OutPart op = new OutPart();
        op.setBody(theFileid + "");  // en caso de que theFileid no se haya inicializado
        op.setContentType(MediaType.TEXT_PLAIN);
        bomp.setLocationHeader("fileid");
        bomp.addPart(op);
    
        return Response.ok(bomp, "multipart/form-data").build();
    }
    El originador del envío de form POST puede generar una cabecera content-transfer-encoding para una o varias partes del mensaje de varias partes. La implementación de IBM JAX-RS intenta decodificar automáticamente la carga útil de la parte de acuerdo con esta cabecera cuando la cabecera tiene el tipo de codificación base64 o quoted-printable.
  2. Opcional: En JAX-RS 1.1, si no desea que la implementación de IBM JAX-RS decodifique automáticamente la parte de carga útil, coloque la anotación @Encoded en el parámetro del método. En el ejemplo siguiente se muestra el uso de la anotación @Encoded en el parámetro del método:
    package com.example.jaxrs;
    @POST
    @Consumes("multipart/form-data")
    @Produces("multipart/form-data")
    public Response postFormData(@FormParam("fileid") int theFileid,
                                 @FormParam("description") String theDescription,
                                 @Encoded @FormParam("thefile") File theFile) {
        // no decodificar automáticamente la parte de carga útil del archivo
        ...
    }
    Si desea tener el control completo de la recuperación y decodificación de todas las partes de un mensaje multipart/form-data, puede recibir el propio objeto BufferedInMultiPart:
    package com.example.jaxrs;
    import org.apache.wink.common.model.multipart.BufferedInMultiPart;
    import org.apache.wink.common.model.multipart.InPart;
    @POST
    @Consumes("multipart/form-data")
    @Produces("multipart/form-data")
    public Response postFormData(BufferedInMultiPart bimp) {
        List<InPart> parts = bimp.getParts();
        // repetir en las "partes" y procesarlas como se desee
    }

Resultados

Recibirá y repetirá datos de un POST HTTP con contenido de datos varias partes/formulario de dos formas distintas: permitiendo a la implementación IBM JAX-RS dividir y decodificar automáticamente las partes y recibiendo las partes todavía codificadas para procesarlas usted mismo.


Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_multipart_formdata_from_html
File name: twbs_jaxrs_multipart_formdata_from_html.html