Thi*_*han 3 rest resources amazon-ses spring-boot microservices
无法嵌入图像并附加 Spring Boot 资源文件夹中的文件
我使用 Spring Boot 创建了一个 Restful Web 服务(Jar 文件而不是 War 文件)。有些服务将发送电子邮件,有些服务将发送带有附件的电子邮件(将动态创建)。Web 部件(Angular)驻留在部署在不同服务器上的 Apache 服务器中。
我使用 Freemarker 模板撰写电子邮件并使用 Amazon SES 发送电子邮件。
来自 freemarker 模板
<IMG src="cid:gridEmailHeaderImage">
Run Code Online (Sandbox Code Playgroud)
添加图像的代码
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);
Run Code Online (Sandbox Code Playgroud)
如果我提供绝对路径,我就可以嵌入和附加文件。但如果提供相对路径则不起作用。
我的文件夹结构
C:\workspace\service-1.0\src\main\resources\images\header.png
C:\workspace\service-1.0\src\main\resources\attachements\test-attachment-1.txt
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法但没有成功
方法一
ServletContext context;
String path = context.getRealPath("/resources/images")+"/header.png";
Run Code Online (Sandbox Code Playgroud)
它正在以下文件夹中查找图像,但图像在该文件夹中不可用。
C:\Users\用户名\AppData\Local\Temp\tomcat-docbase..\resources\images/header.png
方法2
basePath = this.getClass().getClassLoader().getResource("/images/").getPath();
Run Code Online (Sandbox Code Playgroud)
C:\workspace\service-1.0\src\main\resources\images\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();
Run Code Online (Sandbox Code Playgroud)
(这也行不通)
如果我将图像放在资源下的图像文件夹中。我可以通过以下 URL 查看图像。
http://localhost:7075/myservice/v1/images/header.png
Run Code Online (Sandbox Code Playgroud)
从资源文件夹加载图像可以吗?spring boot jars 会在运行时爆炸吗?从 Spring Boot jar 文件加载图像的正确方法是什么?
由于您的资源是 jar 容器的一部分,因此您不能使用文件路径,只能使用类加载器提供的 URL。根据您是从 IDE 还是从部署的 jar 启动它,这将是一个file://...或jar:...URL。资源文件夹不是 spring boot 结构的一部分,因此您一定不要使用它。使用 URLDataSource 你可以这样做:
URLDataSource source = new URLDataSource(this.getClass().getResource("/images/header.png"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4959 次 |
| 最近记录: |