簡體   English   中英

Rails將PDF保存到Amazon S3

[英]Rails saving a pdf to Amazon S3

我有一個使用gem'wicked_pdf'和gem'combine_pdf'的Rails 3.2應用程序。 它們都可以工作,我可以創建通過電子郵件發送的PDF。

但是,我遇到了電子郵件太大的情況。

因此,我正在嘗試將創建的pdf保存到Amazon S3。 該應用程序已經具有寶石“ aws-sdk”。

這是我的代碼:

  def self.saveallpdf
    @costprojects = Costproject.where("client_id = 2")
    pdf = CombinePDF.new
    @costprojects.each do |costproject|
      @costproject = costproject
      controller = CostprojectsController.new
      controller.instance_variable_set(:"@costproject", @costproject)
      pdf2 = controller.render_to_string(pdf: "Captital Projects.pdf",
                                         template: "costprojects/viewproject",
                                         encoding: "UTF-8")
      pdf << CombinePDF.parse(pdf2)
    end
    @s3 = AWS::S3.new
    @bucket = @s3.buckets['ndeavor3-pdf']
    @obj = @bucket.objects['filename'].write(pdf, acl: :public_read)
  end

我得到的錯誤是:

:data must be provided as a String, Pathname, File, or an object that responds to #read and #eof?
/app/vendor/bundle/ruby/1.9.1/gems/aws-sdk-1.8.3.1/lib/aws/s3/data_options.rb:125:in `validate_data!'
/app/vendor/bundle/ruby/1.9.1/gems/aws-sdk-1.8.3.1/lib/aws/s3/data_options.rb:32:in `compute_write_options'
/app/vendor/bundle/ruby/1.9.1/gems/aws-sdk-1.8.3.1/lib/aws/s3/s3_object.rb:594:in `write'
/app/app/models/costproject.rb:167:in `saveallpdf

我猜was-sdk不喜歡“ pdf”作為文件?

PS-如果尺寸較小,我可以通過電子郵件發送“ pdf”。

謝謝你的幫助!

在這個時間點:

@obj = @bucket.objects['filename'].write(pdf, acl: :public_read)

pdfCombinePDF對象,而不是FileStringPathname

pdf.to_s可能會起作用,或者您必須從CombinePDF對象創建一個新文件

File.new(CombinePDF) # pseduo code only

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM