2011-01-28 13 views
5

私は、PDFファイルを作成してブラウザにストリーミングするJava webappを持っています。ブラウザにストリーミングされたPdfのファイル名を設定します。

byte[] pdf = report.exportPdfToArray(user); 
response.setContentType("application/pdf"); 
response.setHeader("content-disposition", "inline; filename=\"My.pdf\""); 
outStream = response.getOutputStream(); 
outStream.write(pdf); 
outStream.flush(); 
outStream.close(); 

レポートが実行され、それがブラウザに送り返されるが、私はcontent-dispositionを設定していても、ファイルの名前を制御することはできません。 私はJboss 4.2.1を使用しています。私は何が欠けているか知っていますか?

EDIT:コンテンツの配置がインラインである場合、ファイル名を設定する方法はありますか?

+1

一部のブラウザ、すなわちIE6を、時々、この上の面白い行動します。 IE6で動作させるには、クエリ文字列の最後に?f =/myfile.pdfのようなものを追加しなければなりませんでした。 – Spliffster

答えて

8

内容 - 配置:添付ファイル....

+0

しかし、私はファイルをダウンロードしたくありません。私はそれをブラウザに表示したい。 – Atticus

+0

@Atticus:同じ問題があることを確認する必要があります。インラインのインライン(IEとFirefox)で動作しません。 – Ralph

+0

pdfはサーブレットの名前を受け取ります。おそらく、ページの(pdfが表示されている)タイトルを設定する可能性はありますか? – Atticus

1

私は欠陥を検出できません。他のブラウザ/読者との動作を確認しましたか? RFCのよう

が、それはクライアントがインラインで表示された場合は、ファイル名の情報をどうやって持っているものを定義されていない...そうする回避策は

+0

RFC: が分離して別のファイルに格納されている場合、送信者は使用するファイル名を提案したいかもしれません。受信MUAが エンティティをファイルに書き込む場合、推奨ファイル名は、可能であれば、実際のファイル名のために として使用する必要があります。 受信MUAが暗黙のうちに提案された ファイル名を使用しないことが重要です。提案されたファイル名は、ローカルファイルシステムの規則に従うことを確認するためにチェックされるべきであり(おそらく が変更される)、既存のファイルを上書きせず、セキュリティ の問題を提示しないべきである。 – Ralph

+1

上記の実装に欠陥があるさまざまなIEバージョンと、IEまたはacrobatプラグインがHTTP応答ヘッダーを処理する方法について説明します。私は他のブラウザに問題はなかった。 – Spliffster

-2

があります。 iframeをHTMLページで開くiframeを使うことができます。iframeはpdfレポートを保持しますが、htmlページはiframeから独立しています。 iframeを保持するhtmlページのタイトルを編集できます。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<html> 
    <head> 
     <title>${reportName}</title> 
    </head> 
    <body> 
     <iframe src="/fcWeb/ReportPDFServlet" width="100%" height="100%"></iframe> 
    </body> 
</html> 
+0

ここにあなたのコードマークアップについて書いていないものがあります。このガイド(http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)を見て、それを修正するための答えを編集してください。 – Flexo

3

MSIEは名前を付けて保存アクションのデフォルトのファイル名として要求URL(最後の/後の部分)のパス情報の最後の部分を使用します。 Content-Dispositionヘッダのfilename属性をすべて無視します。他のすべてのブラウザは、そのヘッダを適切に扱います。

PDFサーブレットのURLパターンをパスマッピングに変更する必要があります。私。 /pdfhttp://example.com/context/pdfを使用せず、/pdf/*http://example.com/context/pdf/report.pdfを使用してください。この方法でMSIEは名前を付けて保存アクションのデフォルトのファイル名として "pdf"の代わりに "report.pdf"を使用します。

2

私はjavaで解決策を試してみました。

response.setHeader("Content-Disposition","inline; filename=\"MyFile.pdf\""); 
response.setContentType("application/pdf; name=\"MyFile.pdf\""); 
response.getOutputStream().write(pdfAsBytesArray); 
0

それは奇妙だが、それは誰か(多分誰かがそれと間違っているものを伝えることができます)のために役立つことができます:それはない

response.addHeader("content-length", String.valueOf(((FileInputStream) is).getChannel().size())); 
response.addHeader("Content-disposition", "attachment; filename=\"MyFileName.doc\""); 

:ように私は2つのヘッダを設定すると

作業。私はそれが期待どおりに動作順序を変更する場合でも:

response.addHeader("Content-disposition", "attachment; filename=\"MyFileName.doc\""); 
response.addHeader("content-length", String.valueOf(((FileInputStream) is).getChannel().size())); 
関連する問題