我用回形针将文件发送到S3,我想知道每个用户使用了多少空间占用。检查文件夹大小在Ruby on Rails的3
对于每个用户i都有一个文件夹用户/:ID /文件/。
我可以在我的数据库中注册当我保存每个文件需要多少空间,但我优先直接在S3检查它,有一个简单的方法吗?
我用回形针将文件发送到S3,我想知道每个用户使用了多少空间占用。检查文件夹大小在Ruby on Rails的3
对于每个用户i都有一个文件夹用户/:ID /文件/。
我可以在我的数据库中注册当我保存每个文件需要多少空间,但我优先直接在S3检查它,有一个简单的方法吗?
我不知道该算作容易和心灵,你我从文档这样做,但...
回形针使用AWS-SDK,所以如果你直接使用它是这样的:
size = 0
AWS::S3::Bucket.objects.each do |object| #object should be an S3Object
if object.metadata(name) =~ /user//:id//files/
size += object.content_length #in bytes
end
end
您应风与每个用户使用的总字节数。我在不确定的唯一的事情是对象/文件name
元数据的格式。据this post名称应具有/user/:id/files/
格式,但我不知道怎么的其他物品(例如user
)数字在它。
当你稍微挖掘一下,你或许可以改进,但我认为总体思路就在那里。
我得到这个从这些链接:
大厦@ ScottJShea的回答上面,你可以使用with_prefix(prefix)
- 方法:
size = 0
AWS::S3::Bucket.objects.with_prefix('/user//:id//files/').each do |s3_object|
size += s3_object.content_length
end
或:
AWS::S3::Bucket.objects.with_prefix('/user//:id//files/').inject(0) {
|sum, s3_object| sum + s3_object.content_length
}
另外:
如果你是这样的话通过可能会被删除的对象阿婷,你会看到一个异常,你可以拯救它是这样的:
AWS::S3::Bucket.objects.with_prefix('/user//:id//files/').inject(0) {
|sum, s3_object| sum + (s3_object.content_length rescue 0)
}
为此,您可以更快地通过这样的: AWS :: S3 :: Bucket.objects.with_prefix('/用户//:id //文件/')。做 – 2014-04-22 23:28:29
辉煌。 +1来解释,而不是只是抛出一个解决方案,+2的参考链接。 – 2014-07-31 21:34:58