在 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。
由于视频尺寸较大(假设),我可能会将上传过程移至后台作业,这样您的网络服务器就不会超时。
我有一个 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。
由于视频尺寸较大(假设),我可能会将上传过程移至后台作业,这样您的网络服务器就不会超时。