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

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

我一直在研究Knox客户端https://github.com/learnboost/knox ,在开发Node.js应用程序时,它应该能够使Amazon S3轻松工作。

但经过大量的研究,我似乎无法find一种有效地获取桶文件大小的方法 – 我可以在其上做用户帐户限制等。

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

非常感谢,詹姆斯

正如Elf所说的那样,没有直接的方法可以从任何S3操作中获得一个桶的总大小。 你可以做的最好的是循环通过桶中的所有项目,并总结其相应的大小。

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

随意复制它,并将其更改为您的要求。

没有暴露的API来获取桶的大小。 唯一的方法是获得所有的键,遍历它们,并总结桶中所有对象的大小。

我知道你问Node.js,但对于那些只想要任何方式来做到这一点,请检查s3cmd工具: http : //s3tools.org/s3cmd

一旦你得到这个设置,你可以运行s3cmd du s3://bucket-name

首先尝试一下小桶,以确保它正在工作。 这个命令仍然循环所有的事情,所以大桶=大时间。

我到了这个页面,因为我正在寻找相同的解决scheme。 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

显然,你必须安装好这个方法才能正常工作。 干杯:D