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

4
我有一个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附件?

同样的问题出现在一个gif上,你有没有找到任何解决这个问题的答案?(我的意思是即使作为Base64编码的内容,在电子邮件中也无法正常显示) - Maxence
3个回答

4

看起来我找到了解决方法。如果你提供的内容是base64字符串,请确保指定编码方式。否则,Rails会对已经编码过的字符串进行第二次编码。

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

0

来自Rails 文档:

邮件附件会自动进行Base64编码。如果您需要其他编码方式,请将内容进行编码并以哈希形式传递到附件方法中。

因此,您只需设置内容为base64字符串而不指定编码即可正常工作。这就是我在项目中所做的。

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

谢谢,我按照你写的尝试了,但我仍然无法打开附加的PDF文件。也许我需要通过检查二进制本身之类的方式来调查问题。 - 5t111111

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接