Загрузка файла через Paperclip или Carrierwave из почтового вложения - PullRequest
1 голос
/ 25 ноября 2010

Если у меня есть почтовый объект, например:

mail = Mail.new do
  from      "jim@gmail.com"
  to        "jane@yahoo.com"
  subject   "Example"
  text_part do
    body    "Blarg"
  end
  add_file  "/some/file/or/some_such.jpg"
end

Если бы я получил вышеупомянутое письмо в моем приложении

received_mail = mail.encoded
Message.parse(received_mail)

Как бы я передал вложение в CarrierWave/ Скрепка (не смущаюсь, о чем, я буду использовать тот, который справляется лучше всего)?Я пробовал несколько разных методов, но я продолжаю сталкиваться с различными камнями преткновения - есть ли у кого-нибудь рабочее решение для этого?

Моя текущая попытка:

mail.attachments.each do |attachment|
  self.attachments << Attachment.new(:file => Tempfile.new(attachment.filename) {|f| f.write(attachment.decoded)})
end

Это нене похоже на работу - какие-нибудь советы?конец

1 Ответ

6 голосов
/ 25 ноября 2010

Я знаю, что когда я пытался взять почтовые вложения и использовать их со скрепкой, я также столкнулся с некоторыми проблемами. Проблема, насколько я помню, заключалась в том, что скрепка ожидала определенных атрибутов переданного ему объекта File.

Я решил это так:

mail.attachments.each do |attachment|
  file = StringIO.new(attachment.decoded)
  file.class.class_eval { attr_accessor :original_filename, :content_type }
  file.original_filename = attachment.filename
  file.content_type = attachment.mime_type

  #Then you attach it where you want it
  self.attachments << Attachment.new(:file => file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...