【问题标题】:Serve pdf as static resource from spring application running in docker container将 pdf 作为静态资源从在 docker 容器中运行的 spring 应用程序提供
【发布时间】:2019-02-26 17:01:03
【问题描述】:

当我尝试从 localhost/pdfs/filename.pdf 打开时,Pdf 文件为空白,但是当我为图片执行此操作时,它可以工作 (localhost/images/imagename.png) 我的应用在 docker 容器中运行。

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

   @Autowired
   private ApplicationEventPublisher publisher;

   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/images/**").addResourceLocations("classpath:/static/images/").setCachePeriod(31556926);
    registry.addResourceHandler("/pdfs/**").addResourceLocations("classpath:/static/pdfs/").setCachePeriod(31556926);

   }
}

文件夹、图片和 pdf 都在 src/main/resources/static 文件夹中。

为什么它适用于图像文件,但它不适用于 pdf 文件? 谢谢。

【问题讨论】:

  • 对我来说,在 Web 应用程序中提供静态资源的符号“classpath:”很奇怪。事实上,Spring Boot 无需任何额外配置即可为它们提供服务。当您请求 pdf 时,您是否在浏览器开发人员工具中检查了网络选项卡中的响应代码和内容类型是什么?
  • 代码为304,内容类型为pdf。响应是 x��\�r�6���...
  • 能否请您清除浏览器缓存并再次执行上述操作?
  • Carlos 谢谢,但我已经尝试过了,得到了相同的结果。
  • 你找到解决办法了吗?

标签: java spring docker spring-boot pdf


【解决方案1】:

我遇到了同样的问题 - 这是由 maven 过滤资源引起的。排除 *.pdf 有助于解决问题:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <delimiters>
            <delimiter>@</delimiter>
        </delimiters>
        <useDefaultDelimiters>false</useDefaultDelimiters>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

【讨论】:

  • 我在使用 gradle 时遇到了同样的问题。对我来说,它破坏了图像和 pdf 文件。添加文件过滤器解决了我的问题,类似于 @scalkyo 对 maven 所做的。
猜你喜欢
  • 2018-12-28
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2014-09-15
  • 2021-10-11
  • 2015-05-24
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多