我正在生成发票作为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首先保存到我的公共文件夹。
答案 0 :(得分:2)
AWS S3 SDK中的upload_file
方法正在使用文件 - see the method's description。
要从内存中上传对象,您应该使用put
方法 - 请参阅上传的第二种方式中的方法说明on this page