在 rails 应用程序中将用户上传的视频从本地移动到 amazon S3

Move user uploaded video from local to amazon S3 in rails app

我有一个 rails 应用程序可以让用户上传视频。现在,它在本地运行良好,我想将它移动到 AWS,以便当用户上传视频时,它会被添加到我的 S3 存储桶中。

现在,我的视频 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 的内容 gem。据我了解,它可以帮助您在本地和云端上传视频。我必须在这里使用它吗?抱歉,如果我问错了这个问题,我是新来的,也是 rails.

非常感谢,如果您需要更多信息,请告诉我。

您可以对 Ruby 代码进行以下更改以上传视频并允许流式传输视频。

  • 使用 RTMP Distribution 为上传到 S3 的流媒体视频设置 AWS CloudFront。
  • 使用 Ruby SDK for Signed URLs 创建签名 URL(验证访问控制)和 return 从 Rails 端点到浏览器的响应,以便使用特定的已签名URL,浏览器中的网络应用程序运行可以直接将文件上传到S3。

上传文件后,使用 AWS CloudFront url,您可以将视频流式传输到浏览器中的视频播放器。

您将要使用 fog-aws gem。

在你的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 :file 更改为 storage :fog

有关使用 S3 和 Carrierwave 上传文件的完整信息,请查看 documentation

由于视频尺寸较大(假设),我可能会将上传过程移至后台作业,这样您的网络服务器就不会超时。