I am outputting a PDF file in a Web browser (IE8) HttpContext.Response.writefile(fileName)
and it works great. When I try to save the file, it will give me the name of the ashx handler as a default. I would like to actually pass the real name.
I tried to add header information as follow:
context.Response.AddHeader("content-disposition", "attachment; filename=" + fileInfo.Name);
And it works but I do not want the user to have to choose between open and save, i want the file to open normally and if the user chooses to save it then the dialog would give him/her the default filename.
I tried also:
context.Response.AddHeader("content-disposition", "inline; filename=" + fileInfo.Name);
Or just, like Scott Hanselman suggested in his blog.
context.Response.AddHeader("content-disposition", "filename=" + fileInfo.Name);
None of those work for me. Does anybody have any ideas?
In case of INLINE, it seems that Internet explorer is using the last parameter in the URL to build the filename. For example if your url is http://doc.com/131231231 IE will prompt you to save the file as 131231231.pdf If you need a filename for example foo_131231231.pdf you can hack the IE by using this url: http://doc.com/foo_131231231 You may suffer to change your app a bit to expect such ugly parameter, but at the end your app will work as you expect.
See test cases at http://greenbytes.de/tech/tc2231/#inlwithasciifilenamepdf - it seems that this is simply a missing feature in IE.
I also came across this problem. What helped me was to also set the contenttype to
application/pdf
(instead ofapplication/x-pdf
, which is outdated)