Сохранить почтовое вложение как объект Active Storage в Rails - PullRequest
0 голосов
/ 26 марта 2019

Я использую Ruby On Rails v.5.2.2, Active Storage и гем 'mail'.

Я пытаюсь сохранить вложения электронной почты на диск с помощью Active Storage.

Я не могу напрямую сохранить тело вложения как IO, и не могу сохранить его непосредственно в Tempfile ...

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Мое решение описано здесь: https://where.coraline.codes/blog/processing-email-attachments-with-active-storage/

Фрагмент кода:

def process_attachments
  email.attachments.each do |attachment|
    next unless VALID_MIME_TYPES.include?(attachment.content_type)
    issue.uploads.attach(
      io: attachment.to_io,
      filename: attachment.original_filename,
      content_type: attachment.content_type
    )
  end
end

В случае MailGun attachment является экземпляром ActionDispatch::Http::UploadedFile.Так что attachment.to_io является ключом там.

0 голосов
/ 26 марта 2019

Это решение, которое я принял:

mail = Mail.new(body)
# ...
att = mail.attachments.first

temp_file = Tempfile.new('attachment')
begin
  File.open(temp_file.path, 'wb') do |file|
    file.write(att.body.decoded)
  end
  @msg.files.attach(io: File.open(temp_file.path), filename: att.filename)
att.filename)
ensure
   temp_file.close
   temp_file.unlink
end
...