如何在将数据转储到响应流时指定文件名?
现在我正在做以下事情:
byte[] data= GetFoo();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.BinaryWrite(data);
Response.End();
使用上面的代码,我将“foo.aspx.pdf”作为要保存的文件名。我似乎记得能够在响应中添加标题以指定要保存的文件名。
答案 0 :(得分:56)
在标题中添加内容处置:
Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");
答案 1 :(得分:18)
仅供参考...如果您使用“内联”而不是“附件”,该文件将在IE中自动打开。而不是通过打开/保存对话框提示用户。
Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
答案 2 :(得分:15)
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
答案 3 :(得分:2)
出于某种原因,大多数答案似乎都没有尝试编码文件名值。如果文件包含空格,分号或引号,则可能无法正确显示。
看起来您可以使用ContentDisposition
类生成正确的标头值:
Response.AppendHeader("Content-Disposition", new ContentDisposition
{
FileName = yourFilename
}.ToString());
您可以查看the source code for ContentDisposition.ToString()
以确认它正在尝试正确编码。
警告:当文件名包含短划线(不是连字符)时,这似乎会崩溃。我还没有费心去研究这个问题。
答案 4 :(得分:1)
Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")