使用AWS api检查amazon s3上是否存在对象

时间:2013-07-16 15:29:54

标签: php api amazon-web-services amazon-s3

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

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

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

3 个答案:

答案 0 :(得分:5)

您可能想要对整个“平面文件系统”进行更多考虑。当我第一次开始编写PHP与S3 API接口时,我希望能够遍历目录和每个文件夹中的文件。这不是它的工作方式!

这是来自Ryan Parman,你引用的一个问题的答案之一:

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

“/ albums / Carcassonne-France /”返回false,因为没有具有该名称的单个对象。“

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

s3://myBucket/myFolder/taco.jpg

s3://myBucket/myFolder/jambox.jpg

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

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

答案 1 :(得分:2)

@Dan是对的。但是,查看S3 StreamWrapper可能是值得的,这使您可以在S3中使用PHP的内置文件系统功能。

答案 2 :(得分: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
    }