Java从jar文件加载图像

时间:2014-06-02 19:55:23

标签: java spring email

我正在尝试从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);

非常感谢任何有关此的帮助或指导

4 个答案:

答案 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 绑定到文件系统。