我正在将Spring Boot和JAX-RS结合用于我的REST API。在我的Spring Java Application中,我的资源目录中有一个映像。我想用网址提供这张图片,应该是这样的:
localhost:8080/api/get/img/1/imageFileName.png
像这样,我应该可以在img标签的Angular Frontend Application中使用此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应用程序为我创建URL的任何建议?
答案 0 :(得分:0)
我可以为您尝试做的事情提供解决方案,但是绝对不建议这样做。主要原因是缺少缓存。您需要自己实现,如果让服务器提供所有静态内容,则服务器已经提供了该功能。
在Spring Boot + Jersey应用程序中,要能够提供静态内容,您需要具有spring-boot-starter-web
依赖性。然后,您可以将所有静态资源放入src/main/resources/static
1 中。如果将文件/images/foobar.png
放在该目录中,则可以通过localost:8080/images/foobar.png
访问它。
如果您真的 真的想要提供资源方法中的静态内容(我再次强烈反对),那么您就没有了返回byte[]
。您可以只返回一个File
或一个InputStream
。或者,您可以使用StreamingOutput
(仅搜索一些示例-查找任何示例都不会有问题)。但是,再次使用此方法,您需要注意发送所有正确的缓存头,否则浏览器将不会缓存文件,而是在每次请求文件时就将它们提供服务,而这只会使用不必要的资源。
1。还有更多的位置。参见the docs