我可以通过邮件gem通过imap接收电子邮件,并希望将附件添加到我的模型中(称为邮件)。我根据从此blog post获取的代码收到此错误:
Encoding::UndefinedConversionError ("\xC1" from ASCII-8BIT to UTF-8):
我的代码:
mail.attachments.each_with_index do | attachment, index |
fake_file = AttachmentFile.new("test.jpg")
fake_file.write(attachment.decoded)
fake_file.flush
fake_file.original_filename = attachment.filename
fake_file.content_type = "image/gif"
@message.doc1 = fake_file if index == 0 and attachment.content_type.start_with?("image/")
end
不确定我做错了导致错误 - 可能因为文件未在二进制模式下读取?在同一篇文章中给出了另一种选择:
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
这与gif一起工作但是没有pdf,提供回滚。此外,我在Windows上使用Dev,这导致过去的回形针问题(文件大小无法正确读取等)。
该模型具有以下验证:
validates_attachment_content_type :doc1, :content_type => [ 'application/pdf', /image/ ], :message => "only pdf or img"
我的日志文件没有用,只有第一个和第二个选项的正常输出:
Command :: SET PATH=/usr/bin;%PATH% & file -b --mime "C:/Users/FOUNDA~1/AppData/Local/Temp/c81e728d9d4c2f636f067f89cc14862c20150412-5216-1utzh29.gif"
不确定邮件gem有什么样的初始化 - 它能够正确地提取电子邮件。对不起,也许我误解了你的回复。
答案 0 :(得分:0)
我通过验证请求文件名的某个结构,这导致了问题。我列出的第二个选项现在完美无瑕。不能代表第一个问题 - 可能会出现相同的问题。