【问题标题】:Serving static content from Jersey resource method in a Spring Boot app在 Spring Boot 应用程序中从 Jersey 资源方法提供静态内容
【发布时间】:2018-12-28 18:22:16
【问题描述】:

我将 Spring Boot 和 JAX-RS 组合用于我的 REST API。在我的 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?

【问题讨论】:

  • 很明显,一旦我发现了答案,我就会发布答案,但如果我不这样做,我可能别无选择,只能使用那些.. uch 字节数组:/跨度>

标签: java angular spring-boot jersey jax-rs


【解决方案1】:

我可以为您尝试做的事情提供解决方案,但绝对不推荐。主要原因是缺乏缓存。你需要自己实现它,如果你让它提供所有静态内容,它已经由服务器提供。

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

如果您真的 真的想从资源方法中提供静态内容(我再次强烈建议不要这样做),那么您没有 em> 返回byte[]。您可以返回FileInputStream。或者您可以使用StreamingOutput(只需搜索一些示例 - 您应该没有任何问题找到任何示例)。但同样,使用这种方法,您需要注意发送所有正确的缓存标头,否则浏览器将不会缓存文件,并且每次请求时都会提供这些文件,这只会使用不必要的资源。


另见

  • 如果访问静态内容有问题,可能与this issue有关

1。还有更多的位置。见the docs

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 2017-07-15
    • 2015-05-24
    • 2014-09-15
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多