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

log*_*nit 0 php codeigniter amazon-s3

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

[NoSuchKey] The specified key does not exist.
Run Code Online (Sandbox Code Playgroud)

我认为这意味着它无法找到文件/文件夹.文件夹不是对象,你可以得到的大小?

我已经在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);
Run Code Online (Sandbox Code Playgroud)

任何想法赞赏!

谢谢!

Dou*_*ter 5

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

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

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