s3桶中文件夹的大小

时间:2012-05-21 12:47:45

标签: php amazon-s3

我正在研究亚马逊s3水桶。我需要通过代码找到桶内文件夹的大小。我没有找到任何方法直接找到文件夹的大小。那么还有其他方法来实现这个功能吗?

编辑:我知道s3存储桶中没有任何文件夹。但我需要找到所有文件的大小看起来像文件夹文件夹结构。也就是说,如果结构是这样的,https://s3.amazonaws.com/****/uploads/storeeoll48jipuvjbqufcap3p6on6er2bwsufv5ojzqnbe01xvw0fy58x65.png那么我需要找到具有结构https://s3.amazonaws.com/****/uploads/...

的所有文件的大小

6 个答案:

答案 0 :(得分:5)

如果你想在python中使用boto,这是一个你可以尝试的小脚本:

import boto
conn=boto.connect_s3('api_key','api_secret')
bucket=conn.get_bucket('bucketname');
keys=bucket.list('path')
size=0
for key in keys:
        size+= key.size
print size

答案 1 :(得分:4)

来自AwsConsoleApp.java AWS SDK示例:

List<Bucket> buckets = s3.listBuckets();
long totalSize  = 0;
int  totalItems = 0;
for (Bucket bucket : buckets)
{
    ObjectListing objects = s3.listObjects(bucket.getName());
    do {
        for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
            totalSize += objectSummary.getSize();
            totalItems++;
        }
        objects = s3.listNextBatchOfObjects(objects);
    } while (objects.isTruncated());
    System.out.println("You have " + buckets.size() + " Amazon S3 bucket(s), " +
                    "containing " + totalItems + " objects with a total size of " + totalSize + " bytes.");
}

答案 2 :(得分:0)

S3中没有任何称为“文件夹”的文件,它是一个平面文件系统。文件名(存储桶键)可能包含斜杠(/),各种存储桶资源管理器可以使用它来解释文件夹文件结构。

要知道S3中“文件夹”的大小,首先必须知道包含该“文件夹”路径的子字符串的所有单个文件的键。如果你的存储桶包含数百万个文件,这将是一个非常昂贵的操作。

有些S3资源管理器会自动执行此操作。我使用Cloudberry explorer for S3。

答案 3 :(得分:0)

S3中确实不存在文件夹。

密钥为subfolder/myfile.txt的对象由软件显示为位于subfolder文件夹中。但它只是一个显示器,文件夹并不存在。如果要以编程方式查找该“文件夹”中有多少项,请循环遍历以子文件夹开头的所有对象/获取其大小并将其添加。另外,请查看S3Browser,它会为您提供右键单击的大小。

答案 4 :(得分:0)

以下是如何使用boto3:

import boto3

bucketName = '<bucketname>'
client = boto3.client('s3')

def get_all_objects_in_prefix(prefix):
    lastkey = ''
    while True:
        response = client.list_objects(
            Bucket=bucketName,
            Prefix=prefix,
            Marker=lastkey,
            MaxKeys=1000
        )
        if not response.get('Contents'):
            break
        lastkey = [item['Key'] for item in response['Contents']][-1]
        for item in response['Contents']:
            yield item

def get_filesize_of_prefix(prefix):
    size = 0
    for item in get_all_objects_in_prefix(prefix):
        size += item['Size']

    return size

答案 5 :(得分:0)

这是我对boto3的处理方式

从存储桶返回以MB为单位的目录(密钥)大小的函数

    Private Sub Application_Start(sender As Object, e As EventArgs)
        RegisterRoutes(RouteTable.Routes)
    End Sub

    Private Shared Sub RegisterRoutes(routes As RouteCollection)
        routes.MapPageRoute("Customers", "Customers", "~/Customers.aspx")
    End Sub