1

Ich arbeite mit der Rackspace CloudFiles-API, wo ich überprüfen muss, ob der Ordner in einem Container vorhanden ist.PHP - Rackspace CloudFiles API prüfen, ob der Dateipfad bereits existiert?

Ich habe in verschiedenen Bereichen gesucht Ich könnte eine Lösung finden, ob der Container existiert oder das Objekt existiert.

Zum Beispiel:

Format: Container/Ordner/Unterordner/Datei

tatsächliche Datei gespeichert Ort: test/test_folder/test_subfolder/test.txt

Ich möchte hat mein Behälter wissen ist, bekam bereits ein Ordner genannt test_folder

Und ich stieß auf etwas, das Pfad sagt, aber ich bin mir nicht sicher, ob diese Methode existiert!

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

Antwort

1

Obwohl @hurricanerix Antwort hat mir geholfen, ich möchte Methode genau PHP schreiben und Snippet anderen zu helfen, Zukunft.

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

Ausgabe

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

Hope this helfen.

1

Ich kann nicht wirklich diese Frage im Zusammenhang mit PHP beantworten oder Guzzle, aber ich kann einige Informationen über Cloud-Dateien und einige Kommandozeilen-curl Beispiele geben, die helfen können.

Rackspace Cloud Files hat nicht wirklich das Konzept von "Ordnern" in Containern. Sie haben eine URL mit folgenden Teilen: https: // {storage_endpoint}/{account_name}/{container_name}/{object_name}

Sie können jedoch Ordner emulieren, indem Sie Objekte mit dem Zeichen "/" im Namen erstellen . Wenn Sie dann eine Containerliste ausführen, können Sie die Abfragezeichenfolgeparameter "Präfix" und "Trennzeichen" festlegen, um ein ordnerähnliches Verhalten zu emulieren.

Zum Beispiel, sagen Sie eine Auflistung Ihrer Container tun alle Ihre Objekte zu sehen:

$ 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 

Hier haben wir vier Objekte mit den Namen "foo/file1.txt", „foo/bar/file2.txt "," baz/file3.txt "und" baz/file4.txt ".

Der einfachste Weg für die Existenz des Ordners „foo“ zu testen, wäre das Präfix auf „foo /“ und das Trennzeichen „/“ wie folgt:

$ 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 

Wie Sie sehen können Wenn Objekte mit diesem Präfix vorhanden sind, wird ein HTTP 200 zusammen mit einer Liste der Objekte zurückgegeben, die dem Präfix entsprechen. Wenn keine Objekte mit diesem Präfix existieren, existiert der "Ordner" nicht und ein HTTP 204 wird zurückgegeben.

Wenn Sie nun innerhalb von "foo" nach einem "Unterordner" suchen möchten, können Sie einfach einen anderen Containereintrag ausführen, indem Sie das Präfix "foo/bar /" ändern und das Trennzeichen von "/" beibehalten.

Weiter, wenn Sie einen Ordner "Bilder" erstellen möchten und es "cat.jpg" enthalten, müssen Sie zuerst keinen Ordner erstellen, Sie erstellen nur ein Objekt namens "images/cat.jpg" das enthält die Daten für cat.jpg.

Sie können mehr Informationen über Rackspace Cloud Files und Pseudo-Hierarchical Ordner finden Sie hier: https://developer.rackspace.com/docs/cloud-files/v1/general-api-info/pseudo-hierarchical-folders-and-directories/

+0

danke, es hat mir sehr geholfen .. –

Verwandte Themen