2013-02-13 16 views
7

私は開発ニーズに合わせてJAX-RS Webサービスを開発してきました。私がこれまでに書いたすべてのメソッドは、java Stringまたはプリミティブ型を入力として受け入れます。JAX-RS画像を入力として受け入れる

このような方法の例:

@POST 
@Path("MyMethod") 
@Produces(MediaType.APPLICATION_JSON) 
public String MyMethod(@FormParam("username")String username, @FormParam("password")String passowrd) 

私は今、何をしようとしているが、入力として画像を受け入れています。私はこれに関する多くの記事を読んでいます。いくつかは、入力としてbase64エンコーディングを受け入れるよう提案し、他の人は実際のInputSteamを受け入れるよう提案しました。

しかし、私はまだInputStreamを受け入れる方法の完全な例を見ていません。私は@consumerアノテーションと@Providerについて読んだが、私はまだそれの周りに私の頭を包むことはできません。何らかの形で私にこれを導いてくれる記事、文書、または例がありますか?すなわち、理論を表示するのではなく実装する方法に関するステップバイステップのプロセス。

私はbase64エンコーディングが動作することを知っていますが、好奇心から私は他のアプローチがどのように同様に機能しているか知りたいと思います...事前に感謝します。

答えて

7

これは動作するはずです:ここでは

import org.apache.commons.io.IOUtils; 
@POST 
@Path("MyMethod") 
@Consumes("*/*") // to accept all input types 
public String MyMethod(InputStream stream) { 
    byte[] image = IOUtils.toByteArray(stream); 
    return "done"; 
} 
+0

私は上記のコードを試していませんでしたが、複数のパラメータが必要な場合はどうなりますか?一連の文字列とプリミティブ型とInputStream?また、すべてのタイプの画像をサポートしたい場合はどうすればいいですか? – Brams

+1

どのようにあなたのHTTP POSTリクエストボディを見た目にしますか? – yegor256

+0

yegor256、私はあなたの質問を理解するか分からない。リクエストボディをどのように構築するのでしょうか? – Brams

4

は、アップロードの例である:

@POST 
@Path("/fileupload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces("text/plain") 
public String handleUpload(@FormDataParam("file") InputStream in, 
          @FormDataParam("file") FormDataContentDisposition fileDetail) throws Exception { 

    if(fileDetail==null || fileDetail.getFileName()==null) { 
     return "No filename"; 
    } 
    System.out.println("Receiving file "+fileDetail.getFileName()); 
    File f = new File(fileDetail.getFileName()); 
    long ts = System.currentTimeMillis(); 
    FileOutputStream out = new FileOutputStream(f); 

    byte[] buf = new byte[16384]; 
    int len = in.read(buf); 
    while(len!=-1) { 
     out.write(buf,0,len); 
     len = in.read(buf); 
    } 
    out.close(); 
    System.out.println("Received file "+f.getName()+" in "+(System.currentTimeMillis()-ts)/1000+"s"); 
    return "File "+f.getName()+" received\n"; 
} 

それは(臆面もなく)あなたがPOST whithを受け入れる必要があり、このexample on github

ノートからコピーされますMULTIPART_FORM_DATAエンコーディング。ポストを扱うフォームは次のようになります。

<form action="resource/fileupload" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" /> 
    <input type="submit" value="Upload" /> 
</form> 
+0

あなたの答えをありがとう。このツールを使用している場合:http://code.google.com/p/gtm-oauth/私の残りのクライアントとして、私は通常のHTMLフォームを使用して私の残りの要求を提出することはできません。このツールキットを使用して入力ストリームを送信する方法を知っていますか? – Brams

+0

私はリンゴプログラミングの専門家ではありませんが、[この投稿](https://groups.google.com/forum/?fromgroups=#!topic/tumblr-api/ghFPbuaPxho)はあなたが探しているものです –

関連する問題