【问题标题】:Specifying filename for dynamic PDF in asp.net在 asp.net 中为动态 PDF 指定文件名
【发布时间】:2010-09-09 14:18:25
【问题描述】:

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

现在我正在做以下事情:

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

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

【问题讨论】:

    标签: c# asp.net response


    【解决方案1】:

    出于某种原因,大多数答案似乎都没有尝试对文件名值进行编码。如果文件包含空格、分号或引号,则可能无法正确识别。

    看来您可以使用ContentDisposition 类来生成正确的标头值:

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

    您可以查看the source code for ContentDisposition.ToString() 以确认它正在尝试对其进行正确编码。

    警告:当文件名包含破折号(不是连字符)时,这似乎会崩溃。我还没有费心去研究这个。

    【讨论】:

    • 文件名中经常使用破折号,所以这对我们来说是一个很大的缺点。调用相关网页时,我使用 HttpUtility.UrlEncode(FileName),如果需要,我希望我可以在这里做同样的事情。
    【解决方案2】:

    仅供参考...如果您使用“内联”而不是“附件”,该文件将在 IE 中自动打开。而不是通过打开/保存对话框提示用户。

    Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
    

    【讨论】:

    • 这正是我想要的。下一个问题是我想设置一个默认文件名,所以当他们点击保存按钮时,它将具有正确的文件名作为默认值。现在文件名设置为生成 pdf 的 aspx 页面名称。有人有建议吗?
    【解决方案3】:

    在标题中添加内容配置:

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

    【讨论】:

    【解决方案4】:
     Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
    

    【讨论】:

    • 将警告变暗为警告()
    【解决方案5】:
    Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
    

    【讨论】:

    • 如果有人想知道为什么同时存在AddHeaderAppendHeader, wonder no more...
    • 如何将该文件名设为动态 Response.AppendHeader("Content-Disposition", "attachment; filename="+ Projname + ".pdf");@Skliwz
    猜你喜欢
    • 2014-04-22
    • 2017-09-01
    • 1970-01-01
    • 2011-05-14
    • 2012-02-23
    • 2013-05-29
    • 2010-10-07
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多