質問

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

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

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

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

役に立ちましたか?

解決

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

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

他のヒント

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

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

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

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

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

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

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

 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top