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

时间:2016-05-26 03:23:49

标签: ruby-on-rails ruby-on-rails-5

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

我尝试过如下(假设Base64编码的pdf数据在while True: msg = input('''What would you like translated? please use lower-case letters.:''') print ("") for i in msg: print(morse[i]) userstatus = input('Would you like to go again?(y or n): ').lower().strip(' ') if userstatus not in('y', 'ye', 'yes'): sys.exit() 中):

base64_encoded_string

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

现在我提前解码一个Base64字符串,让ActionMailer对Base64进行编码,它没有任何问题。

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

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

3 个答案:

答案 0 :(得分:2)

似乎我找到了解决方案。如果您提供base64字符串作为内容,请确保指定编码。否则Rails将第二次编码已编码的字符串。

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

答案 1 :(得分:0)

来自Rails document

  

Mail会自动Base64编码附件。如果你想   不同的东西,编码你的内容并传入编码   哈希中的内容和编码到附件方法。

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

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

答案 2 :(得分:-2)

此链接应有帮助。

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

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