JAX-RSでファイルダウンロード

| 1件のフィードバック

全国に寒波がきていたようで、ここしばらくは大分寒かったですね。
バイク乗りの私としては早々に暖かくなっていただきたいものです。
こんにちわ、DiceK Mikamiです。

今回は軽めのネタとして、JAX-RSを利用した際にバイナリを返却する方法を紹介したいと思います。
百聞は一見に如かず。
と言うことで、まずはサンプルコードを御覧ください。

import java.io.File;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;

@Path("/image")
public class SampleResource {
 @GET
 @Produces("image/png")   //ポイント1
 @Path("{id}")
 public Response getImage(@PathParam("id") Integer imageId){
     File file = new File("<ファイルの場所>"); //ポイント2

     ResponseBuilder response = Response.ok((Object)file); //ポイント3
     String headerVal = "attachment; filename="+imageId.toString()+".png";
     response.header("Content-Disposition",headerVal);
     return response.build();
 }
}

全く簡単だ。
「今回はこれまで」といきたいところですが、ポイントをいくつか下記します。

  • ポイント1
    返却するバイナリのMIMEタイプを指定します。
  • ポイント2
    バイナリをjava.io.File形式で取得します。
  • ポイント3
    javax.ws.rs.core.Response.ResponseBuilderを使用して、ヘッダを追加します。

バイナリファイルをダウンロードさせたいという要求があった場合などに便利ですね。
サンプルでは画像ファイルを返却するようにしておりますが、
@ProducesにてダウンロードさせたいバイナリのMIMEタイプを指定すれば、切り替えることができます。

JAX-RSでファイルダウンロード」への1件のフィードバック

  1. DiceK Mikami

    2012/02/13 追記→思い立ったこと
    個人的にはFile形式で返却物を生成するのはスジ悪ではないかと思っています。
    ただ緊急回避あるいは面倒なことをしたくない時などでは便利です(モックを作るなど)
    File形式に落とし込む前にHTTP Componentなどで別サーバからファイルを取得しても良いし、Hibernateなどでデータベースからバイナリ取ってきても良いかと思います。
    (Hibernateの場合は普通にStore使った方が楽かもしれませんが)

    返信

DiceK Mikami へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>