I use this code in a Servlet which sets the file name of the inlined PDF document:
response.setContentType("application/pdf");
response.setContentLength((int) file.length());
response.setHeader("Content-disposition", "inline; filename=\"" + file.getName() + "\"");
However this does not work in IE 9: the “Save as…” Dialog shows only the last path part of the URL followed by “.pdf” (for “/some/url/invoice” it is “invoice.pdf”)
Is this a known bug? Is there a workaround?
That’s indeed default behaviour of IE. It does not use the
filenameattribute of theContent-Dispositionheader in any way to prepare a default filename for the Save As. Instead, it uses the last part of the request URL path info.I recommend rewriting your Servlet and/or the links in such way that the desired filename is supplied as part of request path info instead of as for example a request parameter.
So, instead of
or
you need to use
When mapped on an URL pattern of
/pdfservlet/*, you can if necessary grab the filename part dynamically in the servlet as follows (for example, to locate the desired PDF file and/or to set the rightfilenamein the header for the more decent webbrowsers):This is by the way regardless of whether it’s served inline or as an attachment.