HTML 形式の送信から multipart/form-data パーツを受信するためのリソースの構成

ファイル・データを送信する HTML 形式は、POST メソッドと「multipart/form-data」アクションを使用して構成する必要があります。 このデータは、IBM Java™ API for RESTful Web Services (JAX-RS) 実装を使用してデータを受け入れる JAX-RS リソース・メソッドが使用する 2 つの方法のいずれかによって受信が可能です。

このタスクについて

このタスクでは、multipart/form-data をコンシュームおよび生成するための JAX-RS メソッドの構成方法について取り上げます。 以下の例は、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>
IBM JAX-RS を実装することによりデータを複数のパーツに分けて受信することができ、必要に応じてそれらのパーツを自身で処理することができます。

手順

  1. リソース・メソッドを作成します。 次のリソース・メソッドを宣言して、HTTP POST から multipart/form-data コンテンツを受信しエコー出力します。
    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();
    }
    フォーム POST の実行依頼の発信元は、複数パーツ・メッセージの 1 つ以上のパーツの Content-Transfer-Encoding ヘッダーを生成できます。IBM JAX-RS 実装は、このヘッダーのエンコード・タイプが base64 または quoted-printable である場合に、このヘッダーに従ってパーツのペイロードを自動的にデコードしようとします。
  2. オプション: JAX-RS 1.1 の場合、IBM JAX-RS 実装によってパーツ・ペイロードを自動デコードしない場合には、メソッド・パラメーターに @Encoded アノテーションを付けます。 以下の例は、メソッド・パラメーターにおける @Encoded アノテーションの使用法を示しています。
    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
        ...
    }
    multipart/form-data メッセージのすべてのパーツの検索とデコードを完全な制御下に置いて行う場合には、次のようにして 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
    }

タスクの結果

IBM JAX-RS 実装でパーツを分割して自動デコードできるようにし、エンコードされたままのパーツを受信してユーザー自身で処理することにより、multipart/form-data Content-Type のデータを HTTP POST から受信し、エコー出力します。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_multipart_formdata_from_html
ファイル名:twbs_jaxrs_multipart_formdata_from_html.html