将Paperclip与Amazon s3上已有的文件一起使用

时间:2010-10-18 16:18:49

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

我正在构建一个适用于视频的Rails应用程序。我正在使用编码服务来编码我的视频,并将编码文件和一些缩略图放在我的s3上的指定位置。我可以通过AWS:S3访问视频,如下所示:

AWS::S3::S3Object.find 'videos/36/base/video.mp4', 'my-bucket-name'

-- or --

AWS::S3::S3Object.value 'videos/36/base/video.mp4', 'my-bucket-name'

我想要做的是在我的编码服务通知编码完成后,使用Paperclip管理这些文件。不知道该怎么做。以下是我到目前为止的情况:

class Encoding << ActiveRecord::Base

   has_attached_file :video,
                :url => ':s3_domain_url',
                :path => 'videos/:video_id/:encoding_type/basename.:extension',
                :storage => :s3,
                :s3_credentials => {:access_key_id => AppConfig.s3.access_key_id,
                                    :secret_access_key => AppConfig.s3.secret_access_key,
                                    :bucket => AppConfig.s3.bucket
                },
                :s3_permissions => 'authenticated-read',
                :s3_protocol => 'http'
end

class Video << ActiveRecord::Base
  def after_encoded
     encoding = encodings.build
     encoding.video = ## WHAT GOES HERE ??
     encoding.save
  end
end

谢谢!非常感谢您的帮助

- 乔纳森

1 个答案:

答案 0 :(得分:3)

我想出了如何做到这一点。直接简单地设置回形针属性。所以我的after_encoded方法看起来像这样

   def after_encoded
     encoding = encodings.build
     encoding.video_file_name = @video_details['url'].split('/').last
     encoding.video_content_type = MIME::Types.type_for(encoding.video_file_name).to_s
     encoding.video_file_size =  @video_details['size']
     encoding.video_updated_at = Time.now
     encoding.save
   end

效果很好