5

我正在使用 AWS api 并且在检查现有对象(文件夹)时遇到问题。
我经历了这个问题,但它对我没有帮助,因为我使用的是最新更新的 SDK。
我搜索了 SDK,发现应该可以工作doesObjectExist,但我无法在任何地方找到函数定义。我的s3.php文件没有这个函数。是我的 S3.php 类。
我还读到 S3 不支持文件夹结构,但由于平面文件系统,它只是在视觉上使它看起来像存储在文件夹中。现在,如果我必须1024x768在 S3 上搜索文件夹,我是否只需检查存储桶的根目录?我的意思是这样

     $chkFileExist = $s3->doesObjectExist($bucketName,'1024x768');

我需要检查文件夹是否存在,如果不使用 API 函数动态创建它。如果存在,则将文件存储在那里。
我需要帮助来实现此功能。请任何人都可以根据他们的经验提出解决方案。
感谢您的关注。

4

3 回答 3

7

您可能想多考虑一下整个“平面文件系统”。当我第一次开始编写 PHP 来与 S3 API 交互时,我期望能够遍历一个目录以及每个文件夹中的文件。但这不是它的工作原理!

这是来自 Ryan Parman,您引用的问题中的其中一个回答:

“S3 是一个平面文件系统。没有文件夹。只是文件名中带有斜线。一些 S3 浏览工具选择在其软件中显示“文件夹”的概念,但它们只是假装。

“/albums/Carcassonne-France/”返回 false,因为没有同名的单数对象。”

如果您有具有以下路径的对象:

s3://myBucket/myFolder/taco.jpg

s3://myBucket/myFolder/jambox.jpg

如果您检查对象是否存在,s3://myBucket/myFolder/它将返回 false,因为没有具有该特定名称的对象。

如果文件夹不存在,了解更多关于为什么要创建文件夹可能会有所帮助,但如果要将对象放入 S3 中的特定“文件夹”中,则可以使用该putObject()方法。

于 2013-07-16T16:00:39.013 回答
2

@Dan 是正确的。但是,查看S3 StreamWrapper可能是值得的,它使您能够在 S3 中使用 PHP 的内置文件系统函数。

于 2013-07-20T19:04:47.227 回答
1

我使用以下简单的hack. 我们必须在每个文件夹中包含一个文件,并且可以检查该文件,因此如果该文件存在,则意味着文件夹路径有效。在我的情况下,我使用的文件是donotdelete.txt,因此任何 s3 查看器都可以理解不应删除此文件。现在使用getObjectInfo函数检查此文件。例如:

    if($s3->getObjectInfo("bucketName","folder_name/donotdelete.txt")))
    { 
        //Do Whatever you want to do if folder exists
    }
    else
    {
        //Do whatever you want to do if folder doesn't exist
    }
于 2016-02-19T07:24:00.103 回答