我正在生成 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 保存到我的公共(public)文件夹。
最佳答案
AWS S3 SDK 中的 upload_file
方法正在处理文件 - see the method's description .
要从内存上传对象,您应该使用 put
方法 - 请参阅第二种上传方式中的方法说明 on this page
关于ruby-on-rails - 将 Wicked 生成的 PDF 上传到 Rails 5 中的 AWS S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48095959/