我的 REST API 结合使用了 Spring Boot 和 JAX-RS。在我的 Spring Java 应用程序中,我的资源目录中有一个图像。我想用 URL 来提供这张图片,它应该是这样的:
localhost:8080/api/get/img/1/imageFileName.png
像这样,我应该能够在我的 Angular 前端应用程序的 img 标签中使用这个 URL:
<img src="localhost:8080/api/get/img/1/imageFileName.png"/>
所以问题是,我真的想把这些东西放在我的文件系统中。我绝对不想返回字节数组,但这是迄今为止我能找到的唯一东西。这是迄今为止我能想到的唯一代码:
@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 吗?
最佳答案
我可以为您提供解决方案,但绝对不推荐。主要原因是缺乏缓存。您需要自己实现它,如果您让它提供所有静态内容,那么服务器已经提供了它。
在 Spring Boot + Jersey 应用程序中,为了能够提供静态内容,您需要具有 spring-boot-starter-web
依赖项。然后,您可以将所有静态资源放入 src/main/resources/static
1 中。如果您将文件 /images/foobar.png
放入该目录中,则可以通过 localost:8080/images/foobar.png
访问它。
如果您真的真的想要通过资源方法提供静态内容(我再次强烈建议不要这样做),则您不必必须返回byte[]
。您可以只返回一个File
或一个InputStream
。或者您可以使用 StreamingOutput(只需搜索一些示例 - 找到任何示例都不会有任何问题)。但同样,使用此方法,您需要注意发送所有正确的缓存 header ,否则浏览器将不会缓存文件,并且每次请求时都会提供它们,这只会使用不必要的资源。
另请参阅
- 如果您在访问静态内容时遇到问题,可能与 this issue 有关。
<子>1。还有更多地点。请参阅the docs
关于java - 在 Spring Boot 应用程序中通过 Jersey 资源方法提供静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51442535/