繁体   English   中英

在asp.net中为动态PDF指定文件名

[英]Specifying filename for dynamic PDF in asp.net

将数据转储到响应流时如何指定文件名?

现在,我正在执行以下操作:

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

使用上面的代码,我得到“ foo.aspx.pdf”作为要保存的文件名。 我似乎记得能够在响应中添加标头以指定要保存的文件名。

在标题中添加内容处置:

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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM