Я читаю содержимое файла на моем клиенте, кодирую его с помощью base64, отправляю его через JSON на мой сервер Rails, декодирую с помощью base64 и сохраняю данные в базе данных. Затем я пытаюсь отправить электронное письмо от Rails с данными в качестве вложения.
Вот мое определение столбца двоичных данных:
t.column :binarydata, :binary, :limit => 10.megabytes, :null => false
Вот мой почтовый шаблон:
class MYMailer < ActionMailer::Base
def mail(from, to, cc, bcc, subject, message, files=[], sent_at = Time.now)
@subject = subject
@recipients = to
@from = from
@cc = cc
@bcc = bcc
@sent_on = sent_at
@body["message"] = message
@headers = {}
# attache files
files.each do |file|
attachment file.mimetype do |a|
a.body = file.binarydata
a.filename = file.filename
end
end
end
end
Здесь я читаю из базы данных и отправляю электронное письмо:
attachements = AttachementItem.find(:all)
MYMailer.deliver_mail("foo@home.com", "bar@home.com", nil, nil, "Attachement test", "This is just a test", attachements)
Вот код, который анализирует входящий JSON и сохраняет данные в базе данных:
attachement_json = params[:attachement]
attachement_json = attachement_json.gsub(/\n/, "\\n")
attachement = AttachementItem.new.from_json(attachement_json)
b64data = Base64.decode64(attachement.binarydata)
attachement.binarydata = b64data
attachement.save
Однако вложения, которые я получаю в своем письме, являются мусором. Я не знаю, есть ли ошибка на моей стороне клиента, и я тоже расследую это, но вы можете увидеть, есть ли у меня ошибка в моем коде Rails?
Спасибо