设置流回浏览器的Pdf的文件名

Att*_*cus 8 java pdf iostream servlets httpresponse

我有一个Java webapp创建一个pdf并将其流回浏览器.

 byte[] pdf = report.exportPdfToArray(user);
response.setContentType("application/pdf");
response.setHeader("content-disposition", "inline; filename=\"My.pdf\"");
outStream = response.getOutputStream();
outStream.write(pdf);
outStream.flush();
outStream.close();
Run Code Online (Sandbox Code Playgroud)

报告被执行并被发送回浏览器,但即使我设置了,我也无法控制文件的名称content-disposition.我正在使用Jboss 4.2.1.你知道我错过了什么吗?

编辑:当内容处置是内联时,有没有办法设置文件名?

Spl*_*ter 9

内容 - 处置:附件....

  • @Atticus:我必须确认我有同样的问题,添加它不适用于内联'内联'(IE和Firefox) (3认同)
  • 但我不想下载该文件.我想在浏览器中显示它. (2认同)
  • 在某些IE上(无法准确记住哪个版本/操作系统),您还必须确保将文件名添加到您的位置或查询字符串的最后(无论最后是什么).例如/myscript.cgi/My.pdf.在那种情况下,My.pdf是一个假文件(myscript.cgi被执行).如果正确配置Apache,则可以执行此操作.或者,您可以在脚本中添加一个伪查询字符串,如:/myscript.cgi?a = 1&b = 2&f =/My.pdf.有了这个hack应用它也可以使用内容处理:内联... (2认同)
  • 这有点旧,但如果您不想下载文件(而是在浏览器中显示),您可以使用response.setHeader("Content-Disposition", "filename=\"" + pdfFileName + "\"" );(省略“附件;”) (2认同)

kun*_*ena 8

我在 java 中尝试了一个解决方案,它奏效了。

response.setHeader("Content-Disposition","inline; filename=\"MyFile.pdf\"");
response.setContentType("application/pdf; name=\"MyFile.pdf\"");
response.getOutputStream().write(pdfAsBytesArray);
Run Code Online (Sandbox Code Playgroud)