2011-07-13 16 views
2

PDFファイルの出力に関する質問があります。現在、PDFをバイナリ形式でデータベースに保存しています。.NETでPDFバイナリデータ出力

http://myhost.com/FileManager.aspx?FileId=8465b2f9-b64e-4a9a-a449-94b5adb3b278 

は、私は推測することができるものから、ブラウザにこれはPDFファイルをロードしていない.aspxページです:私は、次のようなURLを介してPDFファイルを出力しています。 FirefoxとIEはこれを正しく解釈してAdobe Acrobatを起動しますが、Chrome(12.0.742.112)はPDFリーダーを独自に実装しているため、ファイルを正しく開くことができますが、誰かがファイルをChromeに保存すると、 .aspxとして保存します。 .aspxの名前を.pdfに変更するだけで、ファイルが正しくダウンロードされます。しかし、私は「彼はその余分なステップを取る必要があり/ sの私の顧客を言って避けようとしてメートル

私は、Webインスペクタを経由してChromeでロードされたヘッダを見ることを選んだとき、私はこれを参照してください。

FileManager.aspx:-1リソースがドキュメントとして解釈が、Chromeはこれを言うだろう、なぜ私は完全に理解できるMIMEタイプapplication/pdf

で を転送

さらに、私は保存を取得します。ページの読み込み時のボックスとして:

Response.AddHeader("content-disposition", "attachment;filename=blah.pdf"); 

しかし、私はそのファイルをブラウザに保存したいと考えていました。そのため、URL書き換えを使用する以外に、単にHTTPヘッダーを操作してページをPDFとして開き、Chromeに正しく保存する方法はありますか?

最後には、私は、Webサービスを使用してみましたが、私はページにバイナリデータを書き込むように見えることはできません。

this.Context.Response.BinaryWrite(bytes); 

ご協力いただきましてありがとうございます。 ProjectName.FileManagerFileManagerクラスの完全な名前(名前空間とクラス名)である

<httpHandlers> 
    <add verb="*" path="FileManager.pdf" type="ProjectName.FileManager" /> 

...:Webアプリケーションのトップレベルのweb.configで

答えて

4

<httpHandlers>セクションに次の<add>要素を追加FileManager.aspx.cs

これはProjectName.FileManagerで定義されたハンドラを使用してパス/FileManager.pdfを処理するようにASP.NETに指示します。 (System.Web.UI.Pageので、すべてのWebフォームハンドラで、IHttpHandlerインタフェースを実装しています。)

今、あなたはそうのような.PDF拡張子のURLを経由してPDFを果たすことができます。

http://myhost.com/FileManager.pdf?FileId=8465b2f9-b64e-4a9a-a449-94b5adb3b278

あなたはを行いますでは、物理ファイルの名前をFileManager.aspxに変更する必要はありません。ユーザーが/ FileManagerを入力したとき。 pdf?FileId = fooをブラウザで使用すると、ASP.NETはFileManagerで定義されたProjectName.FileManagerクラスを使用して要求を処理します。 aspx

注:

上記なし、さらに変更をカッシーニ(Visual Studioの "ミニ" ウェブサーバ)上で動作するはずです。ただし、IISは、デフォルトでASP.NETに* .aspx、* .asmx、* .ashx要求のみを送信します。したがって、IISで上記の作業を行うには、ASP.NETに/FileManager.pdfの要求を送信するように指示する必要があります。つまり、 "マッピング"を設定する必要があります。

IIS 6では、configure the mapping using IIS managerが必要です。

IIS 7を使用すると、configure a mapping from your web.configとすることができます。これは展開が簡単になりますが、ホスティングの設定方法によって異なります。

+0

クール、ありがとうございます。私はそれを考えなかったとは信じられません。とにかく、あなたの指示が少し不完全で、これを読んでいる人には、私はFileManager.aspxの名前をFileManager.pdfに変更して、私のURLをhttp://myhost.com/FileManager.pdf?FileId=2355235のように書くことができます。おかげさまでジャスティン。 –

+1

良い点、私は私の答えを修正します。 –

2

私にとっては、アプリケーションページ名(あなたの場合はFileManager.aspx)とクエリーマーク(?マーク)の間に目的のファイル名を追加することでした。

だから、最後に、あなたはこのようなものがあるだろう:

http://myhost.com/FileManager.aspx/myfile.pdf?FileId=8465b2f9-b64e-4a9a-a449-94b5adb3b278 

驚くべきことに、正しいアプリケーションが(Filemanager.aspx)を実行しますが、変数は(FileId)を無傷で渡され、その結果は次のようになりますinlineと扱われます(これをattachmentに変更していない場合)。ただし、ブラウザでは、ページを保存する場合に使用するファイル名はmyfile.pdfと考えられます。

+0

それは良い考えです。しかし、* .pdf要求をASP.NETに送るためにIISの設定が必要になると思います。正しい? –

+0

私は実際にApache = PIにありますが、OPが現在の設定から何かを変更する必要があるとは思わない...私が正しく理解すれば、OPはインラインpdfを既に返すことができます。ユーザーがファイルを保存しようとしたときのことです。残念ながら私はここにIISボックスを持っていないので、試してみてください=) –

関連する問題