18

我在 Web 浏览器 (IE8) 中输出 PDF 文件,HttpContext.Response.writefile(fileName)效果很好。当我尝试保存文件时,它会默认为我提供 ashx 处理程序的名称。我想实际传递真实姓名。

我尝试添加标题信息如下:

context.Response.AddHeader("content-disposition", "attachment; filename=" + fileInfo.Name);

它可以工作,但我不希望用户必须在打开和保存之间进行选择,我希望文件正常打开,如果用户选择保存,那么对话框将为他/她提供默认文件名。

我也试过:

context.Response.AddHeader("content-disposition", "inline; filename=" + fileInfo.Name);

或者就像Scott Hanselman 在他的博客中建议的那样

context.Response.AddHeader("content-disposition", "filename=" + fileInfo.Name);

这些都不适合我。有人有什么想法吗?

4

3 回答 3

15

请参阅http://greenbytes.de/tech/tc2231/#inlwithasciifilenamepdf上的测试用例- 这似乎只是 IE 中缺少的功能。

于 2013-02-12T08:18:42.353 回答
8

我也遇到过这个问题。帮助我的是将内容类型设置为application/pdf(而不是application/x-pdf过时的)

response.setContentType("application/pdf");
response.setHeader("Content-disposition", "inline; filename=\"Report.pdf\"");
于 2016-03-30T16:15:15.410 回答
4

在 INLINE 的情况下,似乎 Internet Explorer 正在使用 URL 中的最后一个参数来构建文件名。例如,如果您的网址是http://doc.com/131231231,IE 会提示您将文件另存为 131231231.pdf 如果您需要文件名,例如 foo_131231231.pdf,您可以使用以下网址破解 IE:http:// /doc.com/foo_131231231 你可能会为了期待如此丑陋的参数而稍微改变你的应用程序,但最终你的应用程序会按你预期的那样工作。

于 2013-05-27T12:23:33.133 回答