如何从spring boot资源文件夹

时间:2017-05-22 06:18:18

标签: rest spring-boot resources microservices amazon-ses

无法从spring boot资源文件夹中嵌入图像和附加文件

我使用Spring Boot(Jar文件而不是War文件)创建了Restful Web服务。一些服务将发送电子邮件,其中一些将发送带附件的电子邮件(将动态创建)。 Web部件(Angular)驻留在Apache服务器中,该服务器部署在不同的服务器中。

我正在使用Freemarker模板撰写电子邮件并使用Amazon SES发送电子邮件。

来自freemarker模板

<IMG src="cid:gridEmailHeaderImage">

添加图片的代码

MimeBodyPart inlineImage = new MimeBodyPart();
DataSource fds = new FileDataSource(imagePath.getAbsolutePath());
inlineImage.setDataHandler(new DataHandler(fds));
inlineImage.setHeader("Content-ID", "<" + contentId + ">");
inlineImage.setFileName(fds.getName());
content.addBodyPart(inlineImage);

如果我提供绝对路径,我可以嵌入和附加文件。但是如果提供相对路径它就不起作用了。

我的文件夹结构

C:\workspace\service-1.0\src\main\resources\images\header.png
C:\workspace\service-1.0\src\main\resources\attachements\test-attachment-1.txt

我尝试了以下但没有成功

方法1

ServletContext context;
String path = context.getRealPath("/resources/images")+"/header.png";

正在寻找以下文件夹中的图像,但图像在该文件夹中不可用。

  

C:\ Users \用户名\应用程序数据\本地\ TEMP \ Tomcat的文档库.. \资源\图像/ header.png

方法2

basePath = this.getClass().getClassLoader().getResource("/images/").getPath();

C:\工作空间\服务-1.0 \ SRC \主\资源\图像\ header.png

/C:/workspace/service-1.0/build/libs/service-1.0.jar!/BOOT-INF/classes!/images/ (仅从eclipse开始工作,但不能从命令提示符java -jar build \ lib \ myapp.jar开始)

方法3

ClassPathResource file = new ClassPathResource("header.png");
String mypath = file.getFile().getAbsolutePath();

(这也行不通)

如果我将图像放在资源下的图像文件夹中。我可以通过以下网址查看图片。

http://localhost:7075/myservice/v1/images/header.png

从资源文件夹加载图片是否可以?弹簧靴罐会在运行时爆炸吗?从spring boot jar文件加载图像的正确方法是什么。

1 个答案:

答案 0 :(得分:1)

由于您的资源是jar容器的一部分,因此您不能使用文件路径,而是使用类加载器提供的URL。根据您是从IDE还是从部署的jar启动它,这将是file://...jar:... URL。资源文件夹不是Spring引导结构的一部分,因此您不能使用它。使用URLDataSource,你可以这样做:

URLDataSource source = new URLDataSource(this.getClass().getResource("/images/header.png"));