Configurando um Recurso para Receber Partes multipart/form-data de um Envio de Formulário HTML

Os formulários HTML que transmitem dados do arquivo devem ser configurados com o método POST e a ação "multipart/form-data". Esses dados podem ser recebidos de uma de duas formas pelo método de recurso JAX-RS que aceita-o com a implementação do IBM Java™ API para RESTful Web Services (JAX-RS).

Sobre Esta Tarefa

Esta tarefa fornece instruções para configurar o método JAX-RS para consumir e produzir multipart/form-data. O exemplo a seguir ilustra um formulário 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>
É possível implementar o IBM JAX-RS para receber dados em partes, para que você próprio possa processar essas partes, se necessário.

Procedimento

  1. Crie o método de recurso. Deve-se declarar o método de recurso a seguir para receber e repetir conteúdo dados de formulário/partes múltiplas de um 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) {
        // echo what we got in the form
        BufferedOutMultiPart bomp = new BufferedOutMultiPart();
        OutPart op = new OutPart();
        op.setBody(theFile);
        op.setContentType(MediaType.TEXT_PLAIN);  // or other appropriate type, based on the file you received
        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 + "");  // just in case theFileid is uninitialized
        op.setContentType(MediaType.TEXT_PLAIN);
        bomp.setLocationHeader("fileid");
        bomp.addPart(op);
    
        return Response.ok(bomp, "multipart/form-data").build();
    }
    O envio POST do formulário pode gerar um cabeçalho Conteúdo-Transferência-Codificação para uma ou mais partes da mensagem multipartes. A implementação IBM JAX-RS tenta decodificar automaticamente a carga útil da parte de acordo com este cabeçalho quando o cabeçalho é do tipo de codificação base64 ou quoted-printable.
  2. Opcional: Para JAX-RS 1.1, se você não desejar que a implementação do IBM JAX-RS decodifique automaticamente a carga útil da parte, coloque a anotação @Encoded no parâmetro do método. O seguinte exemplo ilustra o uso da anotação @Encoded no parâmetro de 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) {
        // don't auto-decode the file part payload
        ...
    }
    Se desejar ter o controle total da recuperação e decodificar todas as partes em uma mensagem multipart/form-data, poderá receber o próprio 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();
        // iterate over the "parts" and process them however you like
    }

Resultados

Você recebeu e repetiu dados de um POST HTTP com o tipo de conteúdo dados de formulário/partes múltiplas, permitindo que a implementação do IBM JAX-RS divida e decodifique automaticamente as partes e recebendo as partes ainda codificadas para você processar.


Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_multipart_formdata_from_html
Nome do arquivo: twbs_jaxrs_multipart_formdata_from_html.html