2016-11-30 99 views
1

我与Rackspace公司CloudFiles API,在那里我有一个要求,检查工作文件夹存在容器内。PHP - Rackspace公司CloudFiles API检查文件路径已经存在?

我已搜查跨越不同领域,我能找到解决办法找到,如果容器存在,或者对象是否存在。

例如:

格式:容器/文件夹/子文件夹/文件

实际文件的存储位置: test/test_folder/test_subfolder/test.txt

我想知道的是我的容器已经得到了文件夹,名为test_folder

我遇到了一些说路径的东西,但不知道我们有这种方法存在!

getObjects ->> 'path', 'file path to search' 

回答

1

即使@hurricanerix答案帮助我,我要发布准确的PHP方法和内容片段,以帮助其他的是未来。

$client = new Rackspace(Rackspace::US_IDENTITY_ENDPOINT, array(
    'username' => 'XXXXXXXX', 
    'apiKey' => 'XXXXXXXXXXXXXXXXXXX' 
)); 

$total    = 0; 
$containerObjects = array(); 
$objectStoreService = $client->objectStoreService(null, 'XX'); 
$container   = $objectStoreService->getContainer('test'); 
$objData = $container->ObjectList(array('prefix'=>"test_folder/", 'delimiter'=>"/")); 
if(is_object($objData)) 
{ 
    $total = $objData->count(); 
    if ($total == 0) 
     break; 

    foreach ($objData as $object) { 
     $containerObjects[] = $object->getName(); 
    } 
} 

var_dump($containerObjects); 

输出

array (size=1) 
    0 => string 'test/test_folder/test_subfolder/' (length=32) 

希望这会有所帮助。

1

我真的不能回答PHP或狂饮的背景下,这个问题,但我可以提供云文件的一些信息和一些命令行卷曲的例子,可以帮助。

Rackspace的云文件并没有真正有“文件夹”内的容器的概念。您有以下几部分的URL: 的https:// {storage_endpoint}/{ACCOUNT_NAME}/{CONTAINER_NAME}/{} OBJECT_NAME

但是,您可以通过在名称创建一个与 “/” 字符的对象模仿文件夹。然后执行容器上市的时候,你可以设置“前缀”和“分隔符”查询字符串参数来模拟一个类似文件夹的行为。

例如,假设你做你的容器的列表,查看所有对象:

$ curl -i -XGET -H"x-auth-token: $AUTH_TOKEN" https://storage101.iad3.clouddrive.com/v1/$ACCOUNT_NAME/$CONTAINER_NAME      
HTTP/1.1 200 OK 
... 
Date: Thu, 01 Dec 2016 02:16:53 GMT 

foo/file1.txt 
foo/bar/file2.txt 
baz/file3.txt 
baz/file4.txt 

在这里,我们有一个名为“富/ FILE1.TXT”四个对象,“富/酒吧/ FILE2.TXT “,”baz/file3.txt“和”baz/file4.txt“。

测试文件夹“富”的存在,最简单的方法是设置前缀为“富/”和分隔符“/”如下:

$ curl -i -XGET -H"x-auth-token: $AUTH_TOKEN" https://storage101.iad3.clouddrive.com/v1/$ACCOUNT_NAME/$CONTAINER_NAME?prefix=foo/&delimiter=/ 
HTTP/1.1 200 OK 
... 
Date: Thu, 01 Dec 2016 02:16:45 GMT 

foo/file1.txt 
foo/bar/file2.txt 

正如你所看到的,如果该前缀存在任何对象,则返回HTTP 200以及与该前缀匹配的对象列表。如果该前缀不存在对象,则“文件夹”不存在,并且将返回HTTP 204。

如果您现在想要测试“foo”中的“子文件夹”,只需执行另一个容器列表,将前缀更改为“foo/bar /”并保留“/”的分隔符。

此外,如果您要创建一个文件夹“images”并且它包含“cat.jpg”,则不需要先创建文件夹,只需创建一个名为“images/cat.jpg”的对象包含cat.jpg的数据。

您可以找到有关Rackspace公司云文件和伪层次的文件夹位置的更多信息: ​​

+0

谢谢,它帮了我很多.. –