【问题标题】:Rails saving a pdf to Amazon S3Rails 将 pdf 保存到 Amazon S3
【发布时间】:2015-12-05 23:09:57
【问题描述】:

我有一个使用 gem 'wicked_pdf' 和 gem 'combine_pdf' 的 Rails 3.2 应用程序。 它们都可以工作,我可以创建通过电子邮件发送的 PDF。

但是,我遇到了电子邮件太大的情况。

所以,我正在尝试将创建的 pdf 保存到 Amazon S3。该应用程序已经拥有 gem '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” - 如果它的大小更小。

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    此时:

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

    pdfCombinePDF 对象,而不是 FileStringPathname

    pdf.to_s 可能有效,或者您必须从 CombinePDF 对象创建一个新文件

    File.new(CombinePDF) # pseduo code only
    

    【讨论】:

    • 感谢您的帮助。 pdf.to_s 没有用。不确定如何编写 File.new 行 - 我会尝试研究它。
    • 我使用 file = Tempfile.new('costprojects.pdf') 让它工作
    猜你喜欢
    • 2013-03-02
    • 2016-08-24
    • 2017-10-08
    • 2011-12-20
    • 2021-06-22
    • 1970-01-01
    • 2012-01-17
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多