我正在处理AWS api,并且检查现有对象时遇到问题(文件夹)
我经历了this问题并且它没有帮助我,因为我使用的是最新更新的SDK。
我搜索了SDK并找到this哪个应该可以正常工作,doesObjectExist
但是我无法在任何地方找到函数定义。我的s3.php
文件没有此函数。Here是我的S3.php类。
另外我读到S3不支持文件夹结构,但由于平面文件系统,只是在视觉上使它看起来像存储在文件夹中。现在,如果我必须在S3上搜索文件夹1024x768
,我是否只检查了存储桶的根目录?我的意思是这样的
$chkFileExist = $s3->doesObjectExist($bucketName,'1024x768');
我需要检查文件夹是否存在,如果不是动态使用API函数动态创建它。如果存在则将文件存储在那里。
我需要帮助来实现此功能。请任何人都可以建议有他们经验的解决方案。
感谢您的关注。
答案 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
}