Ressource für den Empfang von Abschnitten mit mehrteiligen Formulardaten aus einem HTML-Übergabeformular konfigurieren

HTML-Formulare, die Dateidaten übertragen, müssen mit der Methode POST und der Aktion "multipart/form-data" konfiguriert werden. Es gibt zwei Methoden, mit denen diese Daten empfangen werden können. Dabei akzeptiert die JAX-RS-Ressourcenmethode die Daten mit der JAX-RS-Implementierung (IBM Java™ API for RESTful Web Services).

Informationen zu diesem Vorgang

Diese Task enthält Anweisungen zur Konfiguration einer JAX-RS-Methode, mit der Sie mehrteilige Formulardaten konsumieren und erzeugen können. Im folgenden Beispiel sehen Sie ein HTML-Formular:
<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>
Sie können IBM JAX-RS implementieren, um die Daten in Abschnitten zu empfangen, die Sie dann, falls erforderlich, selbst verarbeiten können.

Vorgehensweise

  1. Erstellen Sie eine Ressourcenmethode. Damit Inhalt mit mehrteiligen Formulardaten aus einer HTTP-POST-Anforderung empfangen und zurückgemeldet werden kann, müssen Sie die folgende Ressourcenmethode deklarieren:
    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) {
        // die im Formular enthaltenen Daten zurückmelden
        BufferedOutMultiPart bomp = new BufferedOutMultiPart();
        OutPart op = new OutPart();
        op.setBody(theFile);
        op.setContentType(MediaType.TEXT_PLAIN);  // oder ein anderer passender Typ, basierend auf der empfangenen Datei
        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 + "");  // falls die Fileid nicht initialisiert wurde
        op.setContentType(MediaType.TEXT_PLAIN);
        bomp.setLocationHeader("fileid");
        bomp.addPart(op);
    
        return Response.ok(bomp, "multipart/form-data").build();
    }
    Der Absender des POST-Übergabeformulars kann einen Content-Transfer-Encoding-Header für einen oder mehrere Abschnitte der mehrteiligen Nachricht generieren. Die IBM JAX-RS-Implementierung versucht automatisch, die Nutzdaten des Abschnitts, der diesem Header entspricht, zu decodieren, wenn der Header den Codierungstyp base64 oder quoted-printable hat.
  2. Optional: Wenn die IBM JAX-RS-Implementierung in JAX-RS 1.1 die Nutzdaten des Abschnitts nicht automatisch decodieren soll, definieren Sie die Annotation @Encoded für den Methodenparameter. Das folgende Beispiel veranschaulicht die Verwendung der Annotation @Encoded im Methodenparameter:
    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) {
        // Nutzdaten des Dateiabschnitts nicht automatisch decodieren.
        ...
    }
    Wenn Sie das Abrufen und Decodieren aller Abschnitte in einer Nachricht mit mehrteiligen Formulardaten vollständig steuern möchten, können Sie das Objekt BufferedInMultiPart selbst empfangen:
    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();
        // Über Abschnitte (parts) iterieren und diese entsprechend verarbeiten
    }

Ergebnisse

Sie erhalten Daten aus einer HTTP-POST-Anforderung mit einem Inhaltstyp (Content-Type), der mehrteilige Formulardaten enthält, und melden diese zurück, indem Sie die IBM JAX-RS-Implementierung die Abschnitte automatisch aufteilen und decodieren lassen. Sie erhalten bestimmte Abschnitte, die noch immer codiert sind, damit Sie sie selbst verarbeiten können.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_multipart_formdata_from_html
Dateiname:twbs_jaxrs_multipart_formdata_from_html.html