如何从Base64字符串创建嵌入式图像作为附件

时间:2019-04-19 06:56:45

标签: ruby-on-rails gmail actionmailer

我的User表中有一列称为img。图像存储为Base64字符串。我尝试使用以下标签显示图片:

<img src="data:image/png;base64,${user.img}" alt="User image" />

虽然此功能适用于开信刀/预览模式,但Gmail似乎不支持此功能。

我现在正根据以下信息尝试将图像创建为嵌入式图像:https://stackoverflow.com/a/39710468/891359

我不了解的是如何正确显示图像。我尝试了以下组合:

在我的邮件中:

attachments.inline["user.png"] = {
  :data => @user.img,
  :mime_type => "image/png",
  :encoding => "base64"
}

在我的模板中:

= image_tag attachments['user.png'].url

不幸的是,它在Gmail中显示为残破的图像图标。难道我做错了什么?

1 个答案:

答案 0 :(得分:1)

好的,我自己解决了。诀窍是使用内容而不是数据。在我的Base64编码的字符串中也有一个必须删除的前缀。最终解决方案是更改邮件程序:

attachments.inline["user.png"] = {
  :content => @user.img.remove('data:image/png;base64,'),
  :mime_type => "image/png",
  :encoding => "base64"
}