web-dev-qa-db-ja.com

動的ファイル名の指定PDF asp.netで

データを応答ストリームにダンプするときにファイル名を指定するにはどうすればよいですか?

現在、私は次のことをしています:

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

上記のコードでは、保存するファイル名として「foo.aspx.pdf」を取得しています。保存するファイル名を指定するために応答にヘッダーを追加できることを覚えているようです。

33
Josh Bush

ヘッダーにcontent-dispositionを追加します。

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");
57
Ryan Farley

参考:「添付」ではなく「インライン」を使用すると、ファイルはIEで自動的に開きます。開く/保存ダイアログでユーザーにプロンプ​​トを出す代わりに。

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
18
EMR
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
15
Sklivvz

何らかの理由で、そこにあるほとんどの回答は、ファイル名の値をエンコードすることすらしていません。ファイルにスペース、セミコロン、引用符が含まれている場合、正しく認識されない可能性があります。

ContentDisposition クラスを使用して正しいヘッダー値を生成できるようです:

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

ContentDisposition.ToString() のソースコードをチェックアウトして、適切にエンコードしようとしていることを確認できます。

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

2
Sam
 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
1
Kibbee