将Wicked生成的PDF上载到Rails 5中的AWS S3

时间:2018-01-04 13:03:29

标签: ruby-on-rails amazon-s3 wicked-pdf

我正在生成发票作为PDF,并希望将它们直接上传到S3。

我正在使用Wicked-PDF和官方AWS SDK。

gem 'wicked_pdf'
gem 'aws-sdk-s3', '~> 1'

现在我创建PDF:

pdf = render_to_string pdf: "some_file_name", template: "invoices/download", encoding: "UTF-8"

想要上传它:

s3 = Aws::S3::Resource.new(region: ENV['AWS_REGION'])
obj = s3.bucket('bucket-development').object('Filename')
obj.upload_file(pdf)

我得到的错误:

ArgumentError: string contains null byte

如果我首先将PDF存储到已定义的路径并使用save_path,它将起作用:

save_path = Rails.root.join('public','filename.pdf')
File.open(save_path, 'wb') do |file|
 file << pdf
end

但我想将临时PDF直接上传到S3而不将PDF首先保存到我的公共文件夹。

1 个答案:

答案 0 :(得分:2)

AWS S3 SDK中的upload_file方法正在使用文件 - see the method's description

要从内存中上传对象,您应该使用put方法 - 请参阅上传的第二种方式中的方法说明on this page

相关问题