如何使用Node.js获取Amazon S3存储桶的总大小?

时间:2011-08-25 09:19:06

标签: node.js amazon-s3

我正在开发一些Node.js项目,其中将为每个创建帐户的用户设置Amazon S3存储桶。我想限制用户可以使用的总大小。

我一直在关注Knox客户端https://github.com/learnboost/knox,它可以在开发Node.js应用程序时轻松使用Amazon S3。

但经过大量研究后,我似乎无法找到一种有效恢复存储桶文件大小的方法 - 我可以在其上执行用户帐户限制等。

我希望这是第一个正确的方法,但也许不是?从概念上讲,我想存储在Amazon S3上上传的用户帐户媒体文件,我想限制用户可以上传和使用的总数。

非常感谢, 詹姆斯

4 个答案:

答案 0 :(得分:2)

没有公开的API来获取存储桶的大小。唯一的方法是获取所有密钥,遍历它们,并总结桶中所有对象的大小。

答案 1 :(得分:1)

正如Elf所说,没有直接的方法可以从任何S3操作获得桶的总大小。您可以做的最好的事情是遍历存储桶中的所有项目并总结其相应的大小。

这是一个程序的完整示例,它列出了存储桶中的所有对象,并在最后打印出文件计数和字节数的摘要:

随意复制并根据您的要求进行更改。

答案 2 :(得分:0)

我知道您询问过Node.js,但对于那些只想要任何方法的人,请查看s3cmd工具:http://s3tools.org/s3cmd

完成设置后,您可以运行s3cmd du s3://bucket-name

先在小水桶上试一下,确保它正常工作。这个命令仍然遍历所有内容,所以大桶=大时间。

答案 3 :(得分:0)

我到了这个页面,因为我正在寻找相同的解决方案。 aws cli有一种方法可以做到这一点:     aws s3api list-objects --bucket $ bucket --output json --query" [sum(Contents []。Size)]"

我写了一个超级简单的包装器,它将字节转换为KB,MB或GB。 我不是这个星球上最优雅的编码器,但这可以通过以下方式工作:     s3du my-bucket-name g(对于GB,k表示KB,m表示MB)

铲斗越大,所需的时间越长,但它的工作原理如下: https://github.com/defenestratexp/s3du.git

显然,您必须正确安装aws cli才能使此方法正常工作。干杯:D