Использование Paperclip с файлами уже на Amazon s3 - PullRequest
1 голос
/ 18 октября 2010

Я создаю приложение 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 Ответ

3 голосов
/ 22 октября 2010

Я понял, как это сделать.Просто установите атрибуты скрепки напрямую.Так что мой метод 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

Отлично работает

...