2017-06-07 36 views
2

我有一個讓用戶上傳視頻的rails應用。目前,它在本地運行良好,我想將其移至AWS,以便用戶上傳視頻時將其添加到我的S3存儲桶中。將用戶上傳的視頻從本地移動到亞馬遜S3 in rails應用

現在,我的視頻uploader.rb看起來是這樣的:

class VideoUploader < CarrierWave::Uploader::Base 

    storage :file 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

end 

什麼我必須在這裏改變,因此它會被上傳到S3?

我也讀過一點關於FOG的寶石。據我所知,它可以幫助您在本地和雲上上傳視頻。我必須在這裏使用它嗎?對不起,如果我以錯誤的方式提出這個問題,我在這裏是新的,也對鐵軌。

非常感謝,並請讓我知道如果你需要任何更多的信息。

回答

0

您將要使用的fog-aws寶石。

在你Gemfile添加

gem 'fog-aws' 

創建initializer並將其命名爲類似carrierwave.rb。然後,您將會把您的憑據在這裏:

CarrierWave.configure do |config| 
    config.fog_provider = 'fog/aws'       # required 
    config.fog_credentials = { 
     provider:    'AWS',      # required 
     aws_access_key_id:  ENV['aws_access_key_id'],  # required 
     aws_secret_access_key: ENV['aws_secret_access_key'], # required 
    } 
    config.fog_directory = ENV['bucket']     # required 
end 

使用ENV變量來隱藏自己的AWS信息。

你也想改變storage :filestorage :fog

有關文件上傳與S3和Carrierwave完整的信息,請查閱documentation

由於大尺寸的視頻(假設),我可能會移動上傳過程爲背景的工作,所以你的web服務器不超時。

+0

非常感謝,先生!我會嘗試一下 – Dinukaperera

+0

如何讓上傳成爲後臺工作? – Dinukaperera

+0

你可以使用'sidekiq'。在您的控制器操作中,您可以將參數傳遞給後臺作業。 – jdgray

1

您可以對Ruby代碼進行以下更改以上傳視頻並允許流式傳輸視頻。

  • 設置AWS CloudFront與RTMP Distribution爲Streaming Videos上傳到S3。
  • 使用Ruby SDK for Signed URLs創建簽名URL(驗證訪問控制),並從一個Rails端點返回響應給瀏覽器,以便使用特定標識的URL,瀏覽器中運行Web應用程序可以直接將文件上傳到S3。

使用AWS CloudFront url上傳文件後,您可以將視頻流式傳輸到瀏覽器中的視頻播放器。

+0

Hey Ashan,我會研究RTMP並讓你知道它是怎麼回事。它看起來像很多的閱讀。另外,當您說使用AWS CloudFront url進行流式傳輸時,這是否意味着在我的視頻視圖代碼中使用它,或者您在談論其他事情? – Dinukaperera

+0

當您將文件上傳到S3時,應該有一些中介支持來在文件仍被下載到瀏覽器時播放該文件的內容。您需要使用CloudFront RTMP分配。通過以下文檔http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowStreamingDistributionsWork.html – Ashan