Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Bytea型に格納したPDFファイルを取り出し表示したい

ファイルの出力についての質問です。
Postgresql8.1のBytea型に格納したPDFファイルを取り出し、出力するという処理を行いたいのですが
以下のコードでは真っ白な画面が返るだけで、PDFファイルが表示されません。
試に、ResponseUtil.downloadを利用してダウンロードダイアログを出力する方法では、うまく表示されましたが
ダウンロードダイアログなしに直接PDFを開きたいと考えています。

PrintWriterを使うなど、試行錯誤していますが手がない状態です。アドバイスをお願い致します。

-----
public HttpServletResponse response;

public String execute() throws Exception {

    // ファイル名
    String filename = "output.pdf";

    response.setHeader("Pragma", "");
    response.addHeader("Cache-Control", "");
    response.addHeader("Content-Disposition", "inline" + "; filename=" + filename);
    response.setContentType("application/pd"f);
    response.setContentLength(new Long(filename.length()).intValue());
    response.getOutputStream().write(entity.pdfFile);
    
    OutputStream out = response.getOutputStream();
    out.flush();
    
    return null;
}

8

回答

9480

閲覧

8件の回答

評価

0

Content-Disposition: inline;

というヘッダを付与して実行してみてください。


デフォルトは attachment になってたと記憶

評価

0

あさん、回答ありがとうございます。

>Content-Disposition: inline;

については、すでに組み込まれています。
3つ目のresponse.addHeader指定にあたります。

ほかに何かお気づきの点があれば、お願いします。

評価

0

それをどう扱うかはクライアントによる。
サーバーができるのは「こうして欲しい」と言うだけ。

評価

0

$さん、回答ありがとうございます。

>それをどう扱うかはクライアントによる。
>サーバーができるのは「こうして欲しい」と言うだけ。 

???よく理解できないのですが、
ほかにも何かお気づきの点があれば、お願いします。

評価

0

ContentLengthにファイル名の長さを渡してますが、
entity.pdfFile.lengthではありませんか?

評価

0

satomiさん、回答ありがとうございます。

指摘通りに修正しました。
ただ、PDFは表示されない状態です。
ほかにも何かお気づきの点があれば、お願いします。

----
public HttpServletResponse response;

public String execute() throws Exception {

    // ファイル名
    String filename = "output.pdf";

    response.setHeader("Pragma", "");
    response.addHeader("Cache-Control", "");
    response.addHeader("Content-Disposition", "inline; filename=" + filename);
    response.setContentType("application/pdf");
    response.setContentLength(entity.pdfFile.length);
    response.getOutputStream().write(entity.pdfFile);
    
    OutputStream out = response.getOutputStream();
    out.flush();
    
    return null;

評価

0

$さんの御回答の補足ですが、
ブラウザ(クライアント)は一般的にContent-Typeで
指定されたMIMEに応じてレスポンスデータの取り扱いを
決定します。

この取り扱いがブラウザ(とブラウザ・プラグイン)に
依存するということです。

昔のIEなど行儀の悪い一部のブラウザでは
Content-Typeの他にリクエストURLのファイル拡張子から
レスポンスデータのタイプを推定したりするなど、
Content-Type以外の要因でレスポンス・データの
取り扱いを決定するブラウザもあります。

※今は分かりませんが、少なくともIE6辺りでは
 そんな動きをした記憶があります

検証に利用されているブラウザでPDFが直接表示できる
ようなサイトを探して、直接表示した場合のレスポンス
ヘッダ等を解析してみるのも手かもしれません。

評価

0

ところで、なんでoutputStreamを二回とってるの?

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。