使用 Spring 嵌入的 tomcat (.jar) 公开资源
Expose resources using Spring embedded tomcat (.jar)
我正在使用 spring bootapp 构建类似休息的 api(其中包含 endpoint/controllers、服务存储库...)
我 运行 我的应用程序使用嵌入式 tomcat 方法和使用 mvn "package".
生成的简单 .jar 文件
其中一个端点允许 UI 到 post 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 是否提供此类功能?我的 "executable jar + embedded 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);
}
您可以在位于 /images
的应用程序中定义一个端点,它只从文件系统读取文件,然后 returns 将其发送给客户端。
我正在使用 spring bootapp 构建类似休息的 api(其中包含 endpoint/controllers、服务存储库...)
我 运行 我的应用程序使用嵌入式 tomcat 方法和使用 mvn "package".
生成的简单 .jar 文件其中一个端点允许 UI 到 post 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 是否提供此类功能?我的 "executable jar + embedded 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);
}
您可以在位于 /images
的应用程序中定义一个端点,它只从文件系统读取文件,然后 returns 将其发送给客户端。