asp.net での動的 PDF のファイル名の指定
質問
応答ストリームにデータをダンプするときにファイル名を指定するにはどうすればよいですか?
現在、私は次のことを行っています。
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 & ";")
所属していません StackOverflow