在rails中,并使用aws-sdk
gem (例如5k个文件),最简单的方法是将S3(不是我的帐户)上托管的公共文件列表复制到我的私有存储桶中?我想保持相同的文件和路径名。
例子:
http://target.com.s3.amazonaws.com/assets/videos/abc123.mp4 (public)
http://myexample.com.s3.amazonaws.com/assets/videos/abc123.mp4 (private)
我想将文件读到内存中,然后直接流到S3中。我的托管服务提供商(Heroku)没有磁盘空间。这些文件是MP4,大小约为3-4MB。
这是我的方法(未测试):
vid_file = 'http://example.com.s3.amazonaws.com/assets/videos/abc123.mp4'
vid_response = HTTParty.get(vid_file)
if vid_response.code == 200
filename = File.basename(vid_file) # TOOD - fix to include s3 folder before object filename
s3 = Aws::S3::Resource.new(region: ENV['AWS_REGION'])
obj = s3.bucket(ENV['S3_BUCKET']).object(filename)
obj.put(body: vid_response.body)
end
但是,SDK是否可以引导AWS在S3存储桶之间执行内部复制,尽管我没有第一个存储桶的密钥(但对象是公共的)?如果不是,我的上述方法是否正确(流式传输到内存中,发布到S3)?
1)没有将公共S3对象的“内部副本”复制到私有S3存储桶的sdk功能。
2)下面的源代码工作,保持了相同的S3目录结构
vid_file = 'http://example.com.s3.amazonaws.com/assets/videos/abc123.mp4'
vid_response = HTTParty.get(vid_file)
if vid_response.code == 200
uri_path = URI(vid_url).path
uri_path.slice!(0) # slice!(0) removes leading slash, otherwise creates an empty s3 folder
s3 = Aws::S3::Resource.new(region: ENV['AWS_REGION'])
obj = s3.bucket(ENV['S3_BUCKET']).object(uri_path)
obj.put(body: vid_response.body) if !obj.exists?
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句