2010-10-18 5 views
1

Я создаю приложение Rails, которое работает с видео. Я использую службу кодирования, которая кодирует мое видео и помещает закодированный файл вместе с несколькими значками в указанном месте на моем s3. Я могу получить доступ к видео через AWS: S3 так:Использование Paperclip с файлами уже на Amazon 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' 

То, что я хотел бы сделать, это управлять этими файлами с Скрепка раз я получить уведомление от моей службы кодирования, что кодирование является полным. Не знаете, как это сделать. Вот что у меня есть до сих пор:

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 

Спасибо! Благодарим Вас за помощь

- Джонатану

ответ

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 

Прекрасно работает