2016-11-30 97 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

謝謝,它幫了我很多.. –