36

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

現在、私は次のことを行っています。

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

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

4

5 に答える 5

61

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

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");
于 2008-09-16T16:10:34.540 に答える
22

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

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
于 2013-01-15T21:21:47.703 に答える
15
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
于 2008-09-16T16:10:04.213 に答える
2

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

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

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

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

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

于 2015-06-22T05:32:49.443 に答える
1
 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
于 2008-09-16T16:11:32.807 に答える