2008-09-16 14 views
31

データを応答ストリームにダンプするときにファイル名を指定する方法を教えてください。asp.netで動的PDFのファイル名を指定

今、私は次のことをやっている:上記のコードでは

byte[] data= GetFoo(); 
Response.Clear(); 
Response.Buffer = true; 
Response.ContentType = "application/pdf";    
Response.BinaryWrite(data); 
Response.End(); 

、私は保存するファイル名として「foo.aspx.pdf」を取得します。私はレスポンスにヘッダーを追加して保存するファイル名を指定できることを覚えているようです。

答えて

53

ヘッダにコンテンツ配置を追加します。

FYI
Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf"""); 
+3

ファイル名を二重引用符で囲む必要があります。 http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download –

15
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf"); 
+4

「AddHeader」と「AppendHeader」の両方が存在する理由が不思議であれば、[wonder no more ...](http://msdn.microsoft.com/en-us/library/system.web.httpresponse。 addheader.aspx) –

+0

http://stackoverflow.com/a/5648407/672244 – idok

+0

そのファイル名を動的にする方法 Response.AppendHeader( "Content-Disposition"、 "attachment; filename =" + Projname + " .pdf "); @ Skliwz –

1
Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";") 
+3

VB構文のような臭いがあります。 –

+0

警告の警告() – JoshYates1980

15

...あなたの代わりに「添付ファイル」の「インライン」を使用している場合、ファイルがIEで自動的に開きます。ユーザーに[開く/保存]ダイアログを表示する代わりに。

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName)); 
+0

これはまさに私が探していたものです。次の問題は、デフォルトのファイル名を設定したいので、保存ボタンを押すと、デフォルトのファイル名になるはずです。現在、ファイル名はpdfを生成したaspxページ名に設定されています。誰でも提案がありますか? – Kevbo

1

何らかの理由で、そこからの回答のほとんどは、ファイル名の値をエンコードしようとしていないようです。ファイルにスペース、セミコロンまたは引用符が含まれていると、正しく表示されないことがあります。あなたは正しいヘッダー値を生成するContentDispositionクラスを使用することができますように見えます

Response.AppendHeader("Content-Disposition", new ContentDisposition 
{ 
    FileName = yourFilename 
}.ToString()); 

をあなたは適切にエンコードしようとしていることを確認するためにthe source code for ContentDisposition.ToString()をチェックアウトすることができます。

警告:ファイル名にダッシュ(ハイフンではありません)が含まれていると、クラッシュしているようです。私はこれをまだ調べていない。

関連する問題