繁体   English   中英

在Spring Boot应用程序中通过Jersey资源方法提供静态内容

[英]Serving static content from Jersey resource method in a Spring Boot app

我为我的REST API使用了Spring Boot和JAX-RS的组合。 在我的Spring Java Application中,我的资源目录中有一个映像。 我想用URL为这张图片提供服务,应该是这样的:

localhost:8080/api/get/img/1/imageFileName.png

这样,我应该可以在Angular Frontend Application的img标签中使用以下URL:

<img src="localhost:8080/api/get/img/1/imageFileName.png"/>

所以问题是,我真的很想在我的FileSystem中拥有这些东西。 我绝对不想返回字节数组,但这是到目前为止我唯一能找到的东西。 到目前为止,这是我唯一能想到的代码:

@GET
@Path("get/img/1")
public String getFile() {
    File file = Paths.get(".", "resources", "Mockup9EventsPageAsMember.png").normalize().toFile();
    return file.toString();
}

显然,这只会返回到相应目录的路径,而不是我可以在img标签中使用的URL链接。

有什么建议可以告诉SpringBoot JAX-RS Application为我创建URL吗?

我可以为您尝试做的事情提供解决方案,但是绝对不建议这样做。 主要原因是缺少缓存。 您需要自己实现,如果让服务器提供所有静态内容,则服务器已经提供了该功能。

在Spring Boot + Jersey应用程序中,要能够提供静态内容,您需要具有spring-boot-starter-web依赖项。 然后,您可以将所有静态资源放入src/main/resources/static 1中 如果将文件/images/foobar.png放在该目录中,则可以通过localost:8080/images/foobar.png

如果你真的 真的想成为从资源的方法(这我再次强烈反对)的静态内容,您不必返回一个byte[] 可以只返回FileInputStream 或者,您可以使用StreamingOutput (只需搜索一些示例-查找任何示例都应该没有问题)。 但是,再次使用此方法,您需要注意发送所有正确的缓存头,否则浏览器将不会缓存文件,而是在每次请求文件时就将它们提供服务,而这只会使用不必要的资源。


也可以看看

  • 如果您在访问静态内容时遇到问题,则可能与此问题有关

1.还有更多位置。 查看文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM