Configuration d'une ressource pour la réception de données de formulaire/multiple (multipart/form-data) à partir d'un envoi de formulaire HTML

Les formulaires HTML qui transmettent des données de fichier doivent être configurés avec la méthode POST et l'action "données de formulaire/multiple" (multipart/form-data). Ces données peuvent être reçues de deux façons par la méthode de ressource JAX-RS qui les accepte avec l'implémentation IBM Java™ API for RESTful Web Services (JAX-RS).

Pourquoi et quand exécuter cette tâche

Cette tâche fournit des instructions pour configurer une méthode JAX-RS afin de consommer et produire des données de formulaire/multiple. L'exemple suivant illustre un formulaire 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>
Vous pouvez implémenter la méthode IBM JAX-RS pour recevoir les données en plusieurs parties, afin de pouvoir traiter vous-même ces composants si nécessaire.

Procédure

  1. Créez une méthode de ressource. Vous devez déclarer la méthode de ressource suivante pour recevoir et renvoyer des données de formulaire/multiple depuis une méthode POST HTTP :
    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();
    }
    L'émetteur de la soumission POST du formulaire peut générer un en-tête Content-Transfer-Encoding pour une ou plusieurs parties du message composite. L'implémentation IBM JAX-RS tente de décoder automatiquement la charge utile de la partie de données en fonction de cet en-tête lorsque le type de codage de ce dernier est base64 ou quoted-printable.
  2. Facultatif : Pour JAX-RS 1.1, si vous ne souhaitez pas que l'implémentation IBM JAX-RS décode automatiquement la charge utile des données, indiquez l'annotation @Encoded dans le paramètre de la méthode. L'exemple suivant illustre l'utilisation de l'annotation @Encoded dans le paramètre de la méthode :
    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
        ...
    }
    Si vous souhaitez contrôler complètement l'extraction et le décodage de toutes les parties d'un message de données de formulaire/multiple, vous pouvez recevoir l'objet BufferedInMultiPart lui-même :
    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
    }

Résultats

Vous allez recevoir et répercuter des données à partir d'une demande HTTP POST avec l'en-tête Content-Type de données de formulaire/multiple, en permettant à l'implémentation IBM JAX-RS de diviser et de décoder automatiquement les parties pour vous, et en recevant les parties encore codées à traiter vous-même.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_multipart_formdata_from_html
Nom du fichier : twbs_jaxrs_multipart_formdata_from_html.html