Spring MVC - 在java类中提供静态内容

时间:2016-02-01 11:26:35

标签: java spring spring-mvc resources

我的春季项目中有一个发送电子邮件的功能。 现在我想在那封电子邮件中发送png-image。

helper.addInline("myLogo", new ClassPathResource("resources/static/image/logo-mail.png"));

我的问题是:我如何将该图像文件提供给我的java类。 我试图将文件映射到我的控制器中的URL,但这不起作用。 谢谢! 问候

2 个答案:

答案 0 :(得分:0)

问题是你想如何发送图像-inline,因为这正是你的助手类试图做的。

理想情况下,您应该使用此语法

来使用加载图像
<img src="cid:imageName.png"></img>

接下来的问题是如何在电子邮件中获取图像 - 这就是您的问题所在?我建议将Spring JavaMailSender与Spring Resource接口结合起来,将图像数据加载并存储在生成的电子邮件中。

  1. 将图像作为资源对象加载 - 假设您的文件为/images/logo.png。在这里使用apache commons库。
  2. InputStreamSource imageSource = new ByteArrayResource(IOUtils.toByteArray(getClass().getResourceAsStream("/images/logo.png")))
    
    1. 下一步是将图像作为附件添加到MIME邮件中:
    2. JavaMailSender mailSender = new JavaMailSenderImpl();  // Or use Spring IoC to inject a pre-configured JavaMailSenderImpl
      MimeMessage mimeMessage = mailSender.createMimeMessage();
      MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
      // Add information to the message, such as subject, recipients, etc
      message.addInline("logo.png", imageSource);
      

      MimeMessageHelper的addInline()方法从InputStreamSource读取字节数据,并创建内联MIME正文部分以保存附件。它还将内容ID设置为第一个参数提供的名称。现在,剩下的就是在我们的HTML正文中引用图像:

      message.setText("<img src=\"cid:logo.png\"></img><div>My logo</div>", true);
      

答案 1 :(得分:0)

我以一种不同的方式解决:

public static final String LOGO_DIR="classpath:/static/images/icon64.png";

...

@Inject
private ApplicationContext context;

...

final Resource resource = context.getResource(EmailTemplateConstants.LOGO_DIR);
        InputStreamSource logoSource = new ByteArrayResource(IOUtils.toByteArray(resource.getInputStream()));
        message.addInline(EmailTemplateConstants.LOGO_NAME, logoSource,
                EmailTemplateConstants.LOGO_CONTENT_TYPE);