我一直在为以下问题苦苦挣扎两天,无法解决它。
我正在尝试在 Spring Boot rest 应用程序中提供静态 pdf。它应该非常简单,但我无法让它工作。
首先,我只是将 pdf 放在资源文件夹中,并尝试直接从 javascript 代码加载它,如下所示:
var newWindow = window.open(/pdf/test.pdf, '');
Run Code Online (Sandbox Code Playgroud)
这导致了一个带有 pdf 的新窗口没有显示任何内容。
从浏览器将 pdf 保存到磁盘并调查内容后发现它们与原始文件不同。我正在展示来自 Atom 的屏幕截图(首先是原始的),采用 ISO-8859-1 编码:
到目前为止,我的结论是:Spring 或 Tomcat 以某种方式更改了二进制内容。也许它正在编码它?在 Base64 中?
然后我尝试在服务器端实现它,看看发生了什么。我实现了一个可以提供 pdf 内容的休息控制器。
一个有趣的发现是它最初给出了与直接方法相同的结果。我使用 classPathResource 来获取 pdf 文件的句柄。
但是当我使用 FileInputStream 和 File 直接从路径加载 pdf 时,它可以工作。见下面的代码:
@RequestMapping(value = "/test.pdf", method = RequestMethod.GET, produces = "application/pdf")
public void getFile(HttpServletResponse response) {
try {
DefaultResourceLoader loader = new DefaultResourceLoader();
/* does not work
ClassPathResource pdfFile = new ClassPathResource("test.pdf");
InputStream is …Run Code Online (Sandbox Code Playgroud)