16

ジャージー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();

 }

正しい方法を行うのを手伝ってください、ありがとう!

4

3 に答える 3

13

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();
}
于 2013-07-26T17:55:09.367 に答える
2

Fileをエンティティとして指定することはできません。そのようには機能しません。

自分でファイルを読み取り、データを(としてbyte[])エンティティとして指定する必要があります。

編集:
出力のストリーミングも確認することをお勧めします。これには2つの利点があります。1)ファイル全体を読み取る必要のないメモリオーバーヘッドなしでサーブファイルを使用できます。2)最初にファイル全体を読み取る必要なしに、クライアントへのデータの送信をすぐに開始します。ストリーミングの例については、https://stackoverflow.com/a/3503704/443515を参照してください。

于 2012-12-14T10:45:51.497 に答える
1

将来の訪問者のために、

これにより、渡された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();
}
于 2016-02-19T07:35:47.507 に答える