1

Je travaille avec l'API Rackspace CloudFiles, où j'ai besoin de vérifier s'il existe un dossier dans un conteneur.PHP - L'API Rackspace CloudFiles vérifie si le chemin du fichier existe déjà?

J'ai cherché parmi différentes zones je pourrais trouver la solution pour trouver si le conteneur existe ou l'objet existe.

Par exemple:

Format: conteneur/dossier/sous-dossier/fichier

fichier empl stocké: test/test_folder/test_subfolder/test.txt

Je veux savoir est mon conteneur a déjà obtenu un dossier appelé test_folder

Et je suis tombé sur quelque chose qui dit chemin, mais je ne suis pas sûr que nous ayons cette méthode existe!

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

Répondre

1

Même si @hurricanerix réponse m'a aidé, je veux poster méthode PHP exacte et snippet pour aider les autres est l'avenir.

$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); 

Sortie

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

Espérons que cela aidera.

1

Je ne peux pas vraiment répondre à cette question dans le contexte de PHP ou Guzzle, mais je peux fournir quelques informations sur le Cloud Files et quelques exemples curl ligne de commande qui pourrait aider.

Rackspace Cloud Files n'a pas vraiment le concept de "dossiers" à l'intérieur des conteneurs. Vous avez une URL avec les pièces suivantes: https: // {storage_endpoint}/{account_name}/{container_name}/{} nom_objet

Vous pouvez cependant imiter les dossiers en créant des objets avec le caractère "/" dans le nom . Ensuite, lors de l'exécution d'une liste de conteneurs, vous pouvez définir les paramètres de chaîne de requête "préfixe" et "délimiteur" pour émuler un comportement de type dossier.

Par exemple, supposons que vous faites une liste de votre conteneur pour voir tous vos objets:

$ 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 

Nous avons ici quatre objets nommés "foo/file1.txt", « foo/bar/file2.txt "," baz/fichier3.txt "et" baz/fichier4.txt ".

La meilleure façon de vérifier l'existence du dossier « foo » serait de définir le préfixe « foo/» et le séparateur à «/» comme suit:

$ 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 

Comme vous pouvez le voir , si des objets existent avec ce préfixe, un HTTP 200 est renvoyé avec une liste des objets correspondant au préfixe. Si aucun objet n'existe avec ce préfixe, le "dossier" n'existe pas et un HTTP 204 sera retourné. Si vous voulez maintenant tester un "sous-dossier" dans "foo", vous pouvez simplement effectuer une autre liste de conteneurs en changeant le préfixe "foo/bar /" et en gardant le délimiteur de "/". De plus, si vous voulez créer un dossier "images" et qu'il contienne "cat.jpg", vous n'avez pas besoin de créer d'abord un dossier, il vous suffit de créer un objet appelé "images/cat.jpg" qui contient les données pour cat.jpg.

Vous pouvez trouver plus d'informations sur Rackspace cloud fichiers et dossiers pseudo-hiérarchique ici: https://developer.rackspace.com/docs/cloud-files/v1/general-api-info/pseudo-hierarchical-folders-and-directories/

+0

merci, ça m'a beaucoup aidé .. –