2014-09-10 45 views
0

問題:從OpenStack的(SWIFT)轉移一些影片到S3Ruby腳本來請求視頻並上傳到S3

寶石:霧,AWS-SDK

我的路徑是這樣的數組:

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

我創建了基於這些路徑的視頻的網址。

我的問題是如何直接將視頻「下載」到S3存儲桶,以及是否有任何方法根據視頻路徑創建目錄結構。

E.g.

視頻: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:Upload videos to Amazon S3 using ruby with sinatra

回答

0

終於有時間限期之前完成這項任務:)如果有人有類似的問題,我希望他們能夠用這個答案作爲啓發。

#!/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 
相關問題