ジャージーWebサービスを使用してPDFファイルをダウンロードする必要があります。すでに次のことを行っていますが、受信したファイルサイズは常に0(ゼロ)です。
@Produces({"application/pdf"})
@GET
@Path("/pdfsample")
public Response getPDF() {
File f = new File("D:/Reports/Output/Testing.pdf");
return Response.ok(f, "application/pdf").build();
}
正しい方法を行うのを手伝ってください、ありがとう!
エンティティとしてFile
を指定することはできませんが、そのようには機能しません。
自分でファイルを読み取り、データを(byte[]
として)エンティティとして指定する必要があります。
編集:
出力のストリーミングも検討することをお勧めします。これには2つの利点があります。 1)ファイル全体を読み取る必要のないメモリオーバーヘッドなしでサーブファイルを使用できます。2)最初にファイル全体を読み取る必要なしに、クライアントへのデータの送信をすぐに開始します。ストリーミングの例については、 https://stackoverflow.com/a/3503704/443515 を参照してください。
Mkyongは常に提供します。不足しているのは正しい応答ヘッダーだけのようです。
http://www.mkyong.com/webservices/jax-rs/download-Excel-file-from-jax-rs/
@GET
@Path("/get")
@Produces("application/pdf")
public Response getFile() {
File file = new File(FILE_PATH);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition","attachment; filename=test.pdf");
return response.build();
}
将来の訪問者のために、
これにより、渡されたIDにあるblobが検出され、ブラウザにPDFドキュメント(データベースに保存されているpdfであると想定))として返されます。
@Path("Download/{id}")
@GET
@Produces("application/pdf")
public Response getPDF(@PathParam("id") Long id) throws Exception {
Entity entity = em.find(ClientCase.class, id);
return Response
.ok()
.type("application/pdf")
.entity(entity.getDocument())
.build();
}