2015-08-21 13 views
6

Biorąc pod uwagę mój S3 wiadro, który zawiera obrazy w strukturze tak:Odzyskaj listę tylko obiekty korzeniowe (folderów) S3 - AWS SDK v3 php

root/portraits/portrait_001.jpg 
root/landscapes/landscape_001.jpg 

gdzie główny jest mój wiadro, i nie ma innego pliki w moim katalogu głównym, tylko te foldery (obiekty), w jaki sposób mogę pobrać listę tylko tych obiektów?

portraits/ 
landscapes/ 

Jestem zaznajomiony z wykorzystaniem separatora i prefiksu w wywołaniu ListObjects.

Gdybym wykonać następujące czynności, otrzymuję żadnych wyników:

$objects = $s3->getIterator('ListObjects', array(
    'Bucket' => $bucket, 
    'Delimiter' => '/', 
)); 

foreach($objects as $object) 
    echo $object['Key'] . "\n"; 

Jeśli nie używam separatora, mam wszystko, oczywiście.

Nie mogę użyć prefiksu, ponieważ pożądane obiekty mają poziom główny. W przeciwnym razie nie mam problemu z używaniem prefiksu do wymawiania, lista tylko plików w "portrety /"

Z moich wyszukiwań udało mi się znaleźć rozwiązania z poprzednich lat, które dotyczą tylko aws php sdk v1 lub v2, i nie miałem szczęścia w próbowaniu tych (v3 jest zupełnie inny)

Jakieś sugestie? Czuję, że brakuje mi czegoś prostego, ale przeszukując dokumentację, nie mogę znaleźć niczego, co mogłoby mi pomóc. W ostateczności, po prostu trzeba trzymać z ręcznie deklarowania tablicę

$categories = ['portraits/', 'landscapes/'] 

Ale to nie jest idealnym rozwiązaniem w przypadku, gdy chcę dodać więcej kategorii w przyszłości, i nie trzeba się martwić o dodawanie kolejnej kategorii ręcznie.

Każda pomoc będzie bardzo mile widziane :)

Edit - Rozwiązanie

muszę zostały patrząc w niewłaściwych miejscach podczas mój obiekt wysypisk, ale ostatecznie ten przedrostki w zwróconym wyniku z a ListObjects zadzwonić z separatora z '/', tak jak poniżej:

$s3->listObjects(array('Bucket' => $bucket, 'Delimiter' => '/')); 
+0

Czy próbowałeś za pomocą listy 'CommonPrefixes' wrócił z' ListBucket'? https://docs.aws.amazon.com/AmazonS3/latest/dev/ListingKeysHierarchy.html –

+0

Oryginalnie nie mogłem znaleźć popularnych prefiksów w dowolnym miejscu, ale być może przeoczyłem to podczas moich zrzutów obiektów w niewłaściwych miejscach.Właśnie je znalazłem. Dzięki za pomoc :) –

Odpowiedz

4

katalogi w rzeczywistości nie istnieją w Amazon S3. Jednak konsola zarządzania umożliwia tworzenie folderów, a ścieżki są obsługiwane, aby dać iluzję katalogów.

Na przykład obiekt bar.jpg zapisany w katalogu foo ma ścieżkę /foo/bar.jpg. Sztuczka polega na tym, że obiekt jest rzeczywiście nazywany foo/bar.jpg, a nie tylko bar.jpg. Większość użytkowników nawet nie zauważy różnicy.

Z poziomu API możliwość wyświetlania katalogów jest realizowana za pomocą koncepcji CommonPrefixes, która wygląda tak samo, jak ścieżki do katalogów i składa się z części nazw obiektów ("kluczy") przed końcowym ukośnikiem.

Patrz: Listing Keys Hierarchically Using a Prefix and Delimiter

Powiązane problemy