使用Ruby gem将图像保存到每个桶的S3或纯类型

时间:2017-12-07 17:18:30

标签: ruby-on-rails ruby-on-rails-3 amazon-s3

我刚开始向S3写几张图片。每个用户每个案例我会有4到10张图片。

User > Case > images

我的计划是在每个案例中创建一个存储桶,但是想知道我是否应该在密钥中保存带有前缀的所有图像,并在一个存储桶中包含所有情况的所有图像?

MyBucket > 2sk67o3/waiver/image1-big.jpg
MyBucket > 2sk67o3/waiver/image1-small.jpg
MyBucket > 2sk67o3/merchandise/image1-big.jpg
MyBucket > 2sk67o3/merchandise/image1-small.jpg

OR

MyBucket_2sk67o3 > waiver/image1-big.jpg
MyBucket_2sk67o3 > waiver/image1-small.jpg
MyBucket_2sk67o3 > merchandise/image1-big.jpg
MyBucket_2sk67o3 > merchandise/image1-small.jpg

我认为最后一个版本是正确的,因为我可以使用" with_prefix" Ruby gem提供的查找图像更容易删除或替换它们?例如,要删除"弃权"当然,我会删除大图像和小图像。

bucket.objects.with_prefix('waiver').collect(&:key)

我想我可以先做第一种方式,然后搜索前缀' 2sk67o3 /商品'。那么问题仍然是更好,更容易,标准的每箱或一个巨大的桶?

1 个答案:

答案 0 :(得分:1)

您应该使用可预测密钥的单个存储桶,以便于查找。像

这样的东西
"MyBucket/waivers/#{WaverModelInstanceOrWhatever.id}/large/image_1.jpg"
"MyBucket/waivers/#{WaverModelInstanceOrWhatever.id}/small/image_1.jpg"
"MyBucket/merchandise/#{MerchandiseModelInstanceOrWhatever.id}/large/image_1.jpg"
"MyBucket/merchandise/#{MerchandiseModelInstanceOrWhatever.id}/small/image_1.jpg"