在Ruby on Rails中,如何将Base64编码的字符串设置为pdf附件?

In Ruby on Rails, how to set Base64 encoded string as a pdf attachment?

我有一个 Base64 编码的 PDF 数据,想使用 ActionMailer 将其设置为邮件的附件。

我试过如下(假设 Base64 编码的 pdf 数据在 base64_encoded_string 中):

attachments['attachment.pdf'] = {
  mime_type: 'application/pdf',
  encoding: 'base64',
  content: base64_encoded_string
}

但是当我打开收到的电子邮件中的附件pdf文件时,文件已损坏。

现在我提前解码一个Base64字符串,让ActionMailer去编码Base64,没问题

attachments[File.basename('attachment.pdf')] = Base64.decode64(base64_encoded_string)

如何直接将Base64编码的字符串设置为pdf附件?

来自 Rails document:

Mail will automatically Base64 encode an attachment. If you want something different, encode your content and pass in the encoded content and encoding in a Hash to the attachments method.

所以你只是将内容设置为base64字符串,没有指定编码。它会起作用,这就是我在我的项目中所做的:

attachments['attachment.pdf'] = {
  mime_type: 'application/pdf',
  content: base64_encoded_string
}

这个link应该有帮助。

http://apidock.com/rails/ActionMailer/Base/attachments

attachments['attachment.pdf'] = { mime_type: 'application/pdf', 
                                  content:  File.read('/path/to/filename.pdf')}

看来我找到了解决办法。如果您提供 base64 字符串作为内容,请确保指定编码。否则 Rails 将对已经编码的字符串进行第二次编码。

attachments['base64_file.pdf'] = {
  mime_type: 'application/pdf',
  encoding: 'base64',
  content: base64_string
}