如何将prawn PDF文件存储到Amazon S3中

时间:2011-12-11 02:44:46

标签: ruby-on-rails-3 pdf amazon-s3 paperclip prawn

我的路径有问题。在我的模型中,我有以下设置:

class Pdffiles < ActiveRecord::Base
  belongs_to :user

  has_attached_file :invoice_file,
                    :path => ":rails_root/public/pdffiles/:user_id/:style/:basename.:extension",
                    :url => "/pdffiles/:user_id/:style/:basename.:extension",

                    :storage => :s3,
                        :bucket => '...',
                        :s3_credentials => {
                          :access_key_id => '...',
                          :secret_access_key => '...'
                        }  
end

并在控制器中查看我的操作:

   pdf = Prawn::Document.new
    pdf.move_down 70

    pdf.text("Prawn Rocks")
    pdf.render_file('prawn.pdf')
    pdf_file = File.open('prawn.pdf')

    pdff = Pdffile.new()
    pdff.pdffile_file = pdf_file
    pdff.user_id = todays_user.id
    pdff.save

我的问题是,这个PDF文件存储在S3服务器上,但是在不好的地方。相反,目录app/public/pdff/id_of_a_user/file_name_of_pdf_file是保存到

的文件

Users/my_name/my_ruby_root_directory/name_of_my_project/public/pdffiles/id_of_a_user/file_name_of_pdf_file

我不完全确定,如果我使用大虾正确保存PDF文件,但我认为问题可能出在控制器中,我已经设置了这个地方,在那里必须保存创建的文件...

我想问你,为了将PDF文件保存到S3中的正确目录,我应该做些什么改变...所有帮助将不胜感激!

曼尼谢谢,9月

2 个答案:

答案 0 :(得分:2)

您可以使用类似CarrierWave(https://github.com/jnicklas/carrierwave)的内容 - 使用FOG库https://github.com/jnicklas/carrierwave

可以非常轻松地上传到S3

答案 1 :(得分:1)

路径的Users/my_name/my_ruby_root_directory/name_of_my_project/public部分来自您在回形针中配置的路径的:rails_root/public部分。因此,如果您真的希望s3“目录”为app/public/pdff/id_of_a_user/file_name_of_pdf_file,则需要给回形针提供以下路径:app/public/pdffiles/:user_id/:style/:basename.:extension

另外,根据您的型号,您应该使用pdff.invoice_file = pdf_file代替pdff.pdffile_file = pdf_file

我希望这会有所帮助。