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

标签 java angular spring-boot jersey jax-rs

我的 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/static1 中。如果您将文件 /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/

相关文章:

Angular 8 getRole 不是嵌套对象中的函数

java - "AlreadyBuiltException: This object has already been built"构建时 "springSecurityFilterChain"

java - 如何在Windows上运行生产者和消费者控制台

java - 无法向springboot发送http post请求

java - 在重复计时器上调用 View.invalidate 的可接受方法

java世界术语

java - 从具有随机生成 key 的 firebase 获取数据

rest - 1 :N or N:1 relations of two objects in Angular2 as observables from a http request

java - 测试@NotNull 时集成测试失败

Java 易失变量、多线程