我正在尝试从jar文件加载图像,以便我可以将其用作我的电子邮件的内联图像,但无论我尝试什么,它都不会为我加载
我使用的代码如下
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true);
message.setTo(toAddress);
message.setFrom(fromAddress); // could be parameterized...
message.setSubject(emailSubject);
URL resource = this.getClass().getResource("emailTemplates/logo/logo.png");
String fileStr = resource.getFile();
File emailLogo = new File(fileStr);
message.addInline("emailLogo", emailLogo);
非常感谢任何有关此的帮助或指导
答案 0 :(得分:1)
您需要在/
之前添加路径。你的代码应该是:
URL resource = this.getClass().getResource("/emailTemplates/logo/logo.png");
String fileStr = resource.getFile();
File emailLogo = new File(fileStr);
假设你有一个类路径,并且在类路径之外,你有一个文件夹" emailTemplates"在其中你有一个名为" logo"的文件夹。带有图像。
答案 1 :(得分:1)
您可以使用方法addInline(String, org.springframework.core.io.Resource)
代替支持File
的方法。
所以你的代码应该像下面的例子:
InputStream in = this.getClass().getResourceAsStream("emailTemplates/logo/logo.png");
message.addInline("emailLogo", new InputStreamResource(in));
它将图片加载为InputStream
并使用InputStreamResource
添加到电子邮件中。
答案 2 :(得分:1)
我遇到了同样的问题。此代码现已投入生产并正常运行:
URL imageUrl = ClassLoader.getSystemResource(/path/from/root/of/jar/pic.png);
Image img = Toolkit.getDefaultToolkit().getImage(imageUrl);
ImageIcon imgIcon = new ImageIcon(img);
编辑:或者为什么不编辑
message.addInline("myLogo", new ClassPathResource("img/mylogo.gif"));
答案 3 :(得分:1)
由于资源路径不是以/
开头,而是相对于类的包,
message.addInline(" emailLogo",new ClassPathResource(" /emailTemplates/logo/logo.png"));
资源可能源于jar或war等等,而 File 绑定到文件系统。