7

我知道的几件事。文件夹不是 S3 的概念,它们只是一个零字节对象,其键名使用“/”作为前缀。假设为简单起见,我们称它们为文件夹和文件会使我的问题更容易表达。

可以使用前缀 ="root/" 执行 s3->get_object_list(..) 并获取所有文件/文件夹。我的问题是这个。

给定文件夹和子文件夹的列表,例如

root/  
root/folder1/  
root/folder1/file1.txt  
root/folder2/ 
root/folder3/file2.txt

我怎样才能只列出文件夹。我希望阻止列出所有文件(即使作为响应,它们也不需要返回)但是 php 中的 get_object_list 当前不支持 commonPrefixes 参考:http ://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/get_object_list 甚至虽然文档这么说,但代码显然没有,并且使用分隔符实际上只会返回根文件夹中的文件(前缀)

我想知道是否有人使用任何基于响应或请求的技术来帮助解决这种情况。

我已经尝试过所有我能想到的前缀、分隔符和标记的组合。PCRE 不太好,但我确信我可以使用我只有一层深文件夹,但我不知道如何为这种情况构建一个。由于我的请求不起作用,我继续接受所有文件和文件夹的响应,并希望在 php 中对其进行排序......或者我想

我在回复中尝试过:dirname() - 没有用会遗漏一些文件夹(空文件夹),确保我可以删除数组中的重复项,但存在丢失文件夹的问题 pathinfo() - 与 dirname() 的行为方式相同,假设所有路径都以文件名结尾。glob - 不走运,和上面一样。

由于我已经在这上面浪费了半天时间,我希望有人已经处理了这个问题并愿意分享:

注意:我在 python 和 boto 中这样做没有问题。但这不是 python,我必须在 PHP 中为此项目执行此操作。

4

1 回答 1

3

你混淆get_object_list()list_objects(). 请参阅:https ://forums.aws.amazon.com/thread.jspa?threadID=106277&tstart=0

于 2012-10-07T21:48:07.953 回答