小编Arj*_*jan的帖子

在 Spring 中通过 ClassPathResource 不正确的编码服务二进制 (pdf) 文件

我一直在为以下问题苦苦挣扎两天,无法解决它。

我正在尝试在 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 编码:

来自原始pdf的片段 相同的部分,从浏览器保存的 pdf

到目前为止,我的结论是: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)

java pdf binary encoding spring

1
推荐指数
1
解决办法
1165
查看次数

标签 统计

binary ×1

encoding ×1

java ×1

pdf ×1

spring ×1