AWS :: S3 :: Errors :: InvalidArgument with Paperclip PDF Upload

时间:2012-04-12 20:49:36

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

我正在尝试将PDF上传到后台进程中生成的AWS S3。我得到的错误有点神秘,我希望有人遇到这个或者能够引导我朝着正确的方向前进。我在应用程序的其他部分使用了paperclip,但这些正在使用表单数据,因为这是创建PDF并在上载之前将其保存到本地临时目录。

相关宝石:

  • Rails 3.0.9
  • paperclip 2.7.0
  • aws-sdk 1.3.9

代码:

MyDownload < ActiveRecord::Base
  has_attached_file :download,
    storage: :s3,
    default_style: :original,
    s3_permissions: 'authenticated_read',
    s3_credentials: "#{Rails.root}/config/s3.yml",
    bucket: S3_BUCKET,
    path: ":class/:attachment/:id/:style/:filename",
    s3_protocol: 'https'

  validates_attachment_content_type :download, content_type: [/application\/(x\-)?pdf/i]
  validates_attachment_presence :download

end

在我的后台处理过程中,我知道PDF已生成,可以在tmp_path中查看。这是我正在使用的一些代码:

PDFKit.new(report_content).to_file(tmp_path)
obj = MyDownload.new(date: Date.today)
obj.download = File.new(tmp_path)

obj.valid? # returns true

但是当我这样做时它失败了:

obj.save!

(AWS::S3::Errors::InvalidArgument)
  (eval):3:in `put_object'

1 个答案:

答案 0 :(得分:8)

事实证明,切换到aws-sdk gem需要s3_permissions选项为符号。将'authenticated_read'更改为:authenticated_read可解决问题。