PDF处理程序:内容处理文件名

时间:2013-02-11 18:42:21

标签: handler filenames ashx content-disposition save-as

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

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

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

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

我也试过了:

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

或者就像Scott Hanselman suggested in his blog一样。

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

这些都不适合我。有没有人有任何想法?

3 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

response.setContentType("application/pdf");
response.setHeader("Content-disposition", "inline; filename=\"Report.pdf\"");