戯言

つらつらと気づいたことを書いていきます。人狼とか。

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Jerseyでブラウザにファイルをダウンロードさせる方法


リンクをクリックしたら、(ページ遷移するのではなく)ファイルをダウンロードさせる方法です。HTTPの仕組みの中で、HTTPヘッダーを設定しているだけなので、Jerseyに限った方法ではありません。私の作ったコードがJerseyを利用しているだけです。Jerseyではダウンロード機能を作ることも多いと思いますので、ご参考まで。

@GET()
@Path("/data")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response download(){
	String data = “あいうえお”;
	return Response.status(Status.OK)
		.entity(data)
		.header("Content-disposition", "attachment; filename=data.txt")	
		.build();
}

HTTPのレスポンスヘッダを付与しただけです。
「あいうえお」と書かれたファイルを、data.txtという名前でダウンロードします。

ResponseBuilder#entity()で、ファイルの中身を指定してるわけですが、ここの引数はString型でなくてもOKです(仕様はObject型です)。特定の文字コードのbyte配列を渡してあげれば、文字コードを指定してファイルをダウンロードさせることもできます。InputStreamをそのまま引数にとることもできました。

なお、保存or開くのダイアログが出るか、直接ダウンロードとなるかは、ブラウザの実装に依存するようです。





スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。