Java Spring MVC在浏览器中显示PDF

4
我该如何强制浏览器显示PDF而不是下载?以下是控制器代码:
 @RequestMapping(value = "/preview.pdf", method = RequestMethod.GET)
protected String preivewSection(      
    HttpServletRequest request,
        HttpSession httpSession,
    HttpServletResponse response) {
    try {
        byte[] documentInBytes = getDocument();         
        response.setHeader("Content-Disposition", "inline; filename=\"report.pdf\"");
        response.setDateHeader("Expires", -1);
        response.setContentType("application/pdf");
        response.setContentLength(documentInBytes.length);
        response.getOutputStream().write(documentInBytes);
    } catch (Exception ioe) {
    } finally {
    }
    return null;
}
4个回答

4
如果您删除此行,PDF 文件将在浏览器中打开。
response.setHeader("Content-Disposition", "inline; filename=\"report.pdf\"");

1

看起来上述提到的控制器是我们从服务器端所需要的全部,问题是浏览器不支持查看PDF文件。


0

请使用 Google Chrome 浏览器,其他浏览器可能无法进行预览。

response.setHeader("Content-Disposition", "attachment; filename=" + file.getName());

但我把这个标题改成了:

response.setHeader("Content-Disposition", "inline; filename=" + file.getName());

预览正常!

因为inline(默认值,表示它可以在网页内显示或作为网页)

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition


0

在检查了Postman的响应后,如果结果像这样,就可以在Chrome上使用

Content-Disposition: name="inline"; filename="XXX.pdf"

我认为提问者省略了“name=”参数

Content-Disposition: inline; filename="XXX.pdf"(在Chrome上无法工作)

如果没有设置Content-Disposition,则某些框架会自动添加一个默认值

Content-Disposition: name="attachment"; filename="f.txt"(在Chrome上无法工作)

一些插件会自动在标题前添加“form-data;”成为:

Content-Disposition: form-data;name="inline"; filename="XXX.pdf"(在Chrome上无法工作)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接