S3存储桶中的子文件夹是一个对象吗?

时间:2011-06-23 13:15:03

标签: php codeigniter amazon-s3

我正在尝试使用PHP(Codeigniter)获取S3中子文件夹的大小。如果我在文件夹中指定了一个文件,则返回数据,但是如果我指定了我得到的文件夹:

[NoSuchKey] The specified key does not exist.

我认为这意味着找不到文件/文件夹。文件夹不是对象,你可以得到大小吗?

我已经在Windows上使用了S3浏览器,并列出了文件夹及其大小。

以下是我正在使用的代码片段:

$userdir = 'userdata/'.$row->name;
$userdata = $this->s3->getObject('bucket_name',$userdir,false);

foreach ($userdata as $name => $val) {
    $totalSize += $val['size'];
}

$totalSize = ($totalSize / 1024 / 1024 / 1024);

任何想法都赞赏!

谢谢!

1 个答案:

答案 0 :(得分:5)

S3中并不存在文件夹。例如,假设您使用/folder1/folder2/mything.txt的键创建了一个对象。大多数允许您浏览存储桶的工具都会将其显示为包含包含mything.txt的folder2的folder1。

虽然由于我们习惯使用的文件系统,这很方便和熟悉,但是考虑S3存储桶及其内容并不是正确的方法。在S3中,您只需在桶中使用/folder1/folder2/mything.txt键中的单个对象。

虽然我不熟悉PHP,但代码背后的基本思想是可靠的。您需要遍历“文件夹”中的所有项目并总计内容以确定大小。不要忘记迭代文件夹中的文件夹。