Как добавить изображения base64 в качестве встроенного вложения в почту в ActiveMailer? - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь отправить изображение base64 в виде встроенного вложения в Ruby на рельсах с помощью Active Mailer, но оно просто не работает.

Я нашел способ добавить вложение:

def inline_base64(name, content)
    attachments.inline[name] =
    {
      mime_type: 'image/png',
      content: content,
      encoding: "base64"
    }
  end

Я вызываю метод, подобный этому

inline_base64('first_client.png', client[:image64])

, где первый параметр - это только имя, а другой - изображение base64 в виде строки

В файле erb, который я пытаюсь вставитьизображение как:

<%= image_tag attachments['first_client.png'].url, size:'90' %>

Но когда я получаю письмо, оно только показывает изображение как сломанное:

image broken

Кто-нибудь знает, как я могу это сделать

1 Ответ

0 голосов
/ 29 января 2019

Base64 - это закодированное представление данных в файле.

Обратите внимание на разницу между Base64 и DataURL.

Строки DataURL начинаются с data:image/png;base64, или аналогичной строки.Если это ваш случай, то ваши данные, закодированные в base 64 - это все, что после ,: base_64 = content.split(',')[1]

Эти данные base 64 являются просто результатом чтения файлаи кодирование его данных как базы 64:

content = Base64.encode64(File.read('your/path.png'))

Вам нужно только отменить кодировку, чтобы получить точный результат, который вернет функция File.read:

data = Base64.decode64(content)

Ваш метод закончится следующим образом:

def inline_base64(name, content)
  attachments.inline[name] = Base64.decode64(content)
end

Если вы все еще получаете испорченное изображение, проверьте, начинается ли ваше content со строки DataURL и удалите ее.

...