【问题标题】:Expose resources using Spring embedded tomcat (.jar)使用 Spring 嵌入式 tomcat (.jar) 公开资源
【发布时间】:2016-04-21 10:34:45
【问题描述】:

我正在使用 spring bootapp 构建一个类似 rest 的 api(其中包含端点/控制器、服务存储库......)

我正在使用嵌入式 tomcat 方法和使用 mvn "package" 生成的简单 .jar 文件运行我的应用程序。

其中一个端点允许 UI 以 base64 格式发布图像,我正在使用以下方法将其转换为图像并将其存储到服务器。

public static ImageData base64ToImage(String base64) throws IOException
{
    String[] imageDataArray = base64.split(",");
    String mimeType = imageDataArray[0].split(";")[0].split(":")[1];
    String ext = mimeTypeToExtension(mimeType);

    byte[] data = Base64.decodeBase64(imageDataArray[1]);
    String imageTitle = UUID.randomUUID()+"_"+getCurrentUnixTimestamp().toString() + ext;
    String filename = IMAGE_PATH + imageTitle;
    FileUtils.writeByteArrayToFile(new File(filename), data);
    return new ImageData(imageTitle, mimeType);
}

这就是有趣的地方..

我不知道如何在后文中公开这些图像。

服务器中的文件结构是这样的:

root
-- executable_embedded_tomcat_app.jar
   -- images 
      -- image1.jpg
      -- image2.jpg

以下当然不行:http://localhost:8080/images/image1.jpg

所以问题是:有没有办法公开这些资源 - Spring 是否提供这样的功能?我的“可执行 jar + 嵌入式 tomcat”方法错了吗?

非常感谢!

----更新----

正如@DaveH 建议的那样,我刚刚添加了以下端点控制器:

@RequestMapping(value="/images/{image:.+}", method=GET)
public byte[] getImage(@PathVariable String image) throws IOException
{
    InputStream in = new BufferedInputStream(new FileInputStream("./images/" + image));
    return IOUtils.toByteArray(in);
}

【问题讨论】:

    标签: java spring-boot embedded-tomcat-7


    【解决方案1】:

    您可以在位于/images 的应用程序中定义一个端点,并从文件系统中读取文件并将其返回给客户端。

    【讨论】:

    • 不错的方法,谢谢。我将使用我添加的特定端点更新问题。
    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 2012-11-27
    • 2020-02-10
    • 2018-02-25
    • 1970-01-01
    • 2011-02-04
    • 2012-09-22
    • 2011-10-30
    相关资源
    最近更新 更多