2016-11-30 15 views
1

Я работаю с API Rackspace CloudFiles, где у меня есть требование проверить, существует ли папка внутри контейнера.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 или жрать, но я могу предоставить некоторую информацию о Cloud Files и некоторые примеры свертыванию командной строки, которые могли бы помочь.

Rackspace Cloud Files на самом деле не имеет понятия «папки» внутри контейнеров. У вас есть URL-адрес со следующими частями: https: // {storage_endpoint}/{имя_пользователя}/{имя_экземпляра}/{имя_пользователя}

Вы можете, однако, эмулировать папки, создавая объекты с символом «/» в названии , Затем при выполнении списка контейнеров вы можете установить параметры строки запроса «префикс» и «разделитель» для эмуляции поведения, подобного папке.

Например, говорят, что вы делаете распечатку вашего контейнера, чтобы увидеть все объекты:

$ 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 

Здесь мы имеем четыре объекта с именем «Foo/file1.txt», «Foo/бар/file2.txt "," baz/file3.txt "и" baz/file4.txt ".

Самый простой способ проверить существование папки «Foo» было бы установить префикс «Foo /» и разделителем на «/» следующим образом:

$ 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 /» и сохраняя разделитель «/».

Кроме того, если вы хотите создать папку «изображения» и содержать ее «cat.jpg», вам не нужно сначала создавать папку, вы просто создаете объект под названием «images/cat.jpg», который содержит данные для cat.jpg.

Вы можете найти более подробную информацию о Rackspace Cloud Files и Псевдо-иерархических папок здесь: https://developer.rackspace.com/docs/cloud-files/v1/general-api-info/pseudo-hierarchical-folders-and-directories/

+0

спасибо, это мне очень помогло .. –