2014-09-10 3 views
0

문제 S3에 업로드 : 안개, AWS-SDK루비 스크립트 동영상을 요청하고

내가 같은 경로 뭔가의 배열을 가지고 :

보석을 S3에 OpenStack은 (SWIFT)에서 일부 동영상을 전송

videos_paths = ["videos/attachments/5142/9f988f89ds9f8/lecture.mp4", "videos/attachments/3134/lecture2.mp4" ..... ] 

해당 경로를 기반으로 동영상에 대한 URL을 만듭니다.

제 질문은 비디오를 S3 버킷에 직접 "다운로드"하고 비디오 경로를 기반으로 디렉토리 구조를 만들 수있는 방법이 있다면 어떻게합니까?

예 :

비디오 : https://myproject.com:443/v1/AUTH_a0fffc9ea361409795fb2e9736012940/production_videos/videos%2Fattachments%2F18116%2Fd6a5bd77a3b203cddsfb0c9d%2Foriginal%2Flecture.mp4?temp_url_sig=dce06f61775f24e88c80bed803b808668b073ed0&temp_url_expires=141243074

워크 플로우 : 요청 비디오 -> S3로 보내와 유사한 디렉토리 구조

내가 어떤 sugestion과 아이디어를 받아 보관합니다. 다른 보석을 사용하거나 다른 방법으로 할 수 있다면. 이미 확인

감사 :

1 : Uploading Videos to S3 with Carrierwave and Fog

2 :

답변

0

Upload videos to Amazon S3 using ruby with sinatra 마지막으로 마감하기 전에이 작업을 완료하는 시간을 가졌다 :) 누군가가 비슷한 문제가있는 경우, 나는 그들이이 대답에서 영감으로 사용할 수 있기를 바랍니다.

#!/usr/bin/env ruby 

require 'fog' 
require 'aws-sdk' 
require 'open-uri' 

videos_paths = ["videos/attachments/5142/e01a339b41ce487643e85/original/lecture.mp4", "videos/attachments/5143/a4fa624f9324bd9988fcc/original/lecture-only.mp4", "videos/attachments/5144/95141978d5ecc14a1995fc/original/lecture.mp4", .... ] # 282 videos 

fog_credentials = { 
    "hp_access_key" => "", 
    "hp_secret_key" => "", 
    "hp_tenant_id" => "", 
    "hp_auth_uri" => "", 
    "hp_use_upass_auth_style" => true, 
    "hp_avl_zone" => "", 
    "os_account_meta_temp_url_key" => "", 
    "persistent" => false 
} 

@storage = Fog::Storage::HP.new(fog_credentials) # Connect to fog storage 
@my_time = 60 * 60 * 24 * 7 * 4 # 4 week links? 

def make_temp_url(path, time = @my_time) 
    @storage.generate_object_temp_url("videos", path, time, "GET") 
end 

def status(path, options = {}) 
    File.open('./stats.txt', 'a') { |file| file.puts "#{options[:msg]}: #{path}" } 
end 

s3 = AWS::S3.new(
    :access_key_id => '', 
    :secret_access_key => '' 
) 

bucket = s3.buckets[''] 

videos_paths.each do |video_path| 
    cur_url = make_temp_url(video_path) 
    obj = bucket.objects[video_path] 

    if obj.exists? 
    status(video_path, msg: "Exists") 
    else 
    begin 
     open(cur_url, 'rb') do |video| 
     obj.write(video.read) 
     status(video_path, msg: "Success") 
     end 
    rescue 
     status(video_path, msg: "Error") 
    end 
    end 
end