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

问题描述 投票:0回答:1

我的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中显示为损坏的图片图标。难道我做错了什么?

ruby-on-rails gmail actionmailer
1个回答
1
投票

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

attachments.inline["user.png"] = {
  :content => @user.img.remove('data:image/png;base64,'),
  :mime_type => "image/png",
  :encoding => "base64"
}
© www.soinside.com 2019 - 2024. All rights reserved.