2015-08-21 15 views
6

Data la mia S3 secchio che contiene le immagini in una struttura in questo modo:Recupera elenco di oggetti root solo (cartelle) in S3 - AWS SDK v3 php

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

dove root è il mio secchio, e non ci sono altre i file nella mia root, solo quelle cartelle (oggetti), come faccio a recuperare un elenco di solo quegli oggetti?

portraits/ 
landscapes/ 

Ho familiarità con l'utilizzo del delimitatore e prefisso nella chiamata ListObjects.

Se faccio il seguente, ottengo alcun risultato:

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

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

Se io non uso un delimitatore, ho tutto, ovviamente.

Non posso usare un prefisso perché gli oggetti che desidero sono a livello di root. Altrimenti, non ho problemi ad usare il prefisso per dire, elencare solo i file in 'ritratti /'

Dalle mie ricerche, sono riuscito a trovare solo soluzioni degli anni precedenti che si applicano solo a aws php sdk v1 o v2, e non ho avuto fortuna nel provare quelli (v3 è abbastanza diverso)

Qualche suggerimento? Mi sento come se mi mancasse qualcosa di semplice, ma cercando nella documentazione, non trovo nulla che possa aiutarmi. Come ultima risorsa, mi limiterò a dover attaccare con dichiarando manualmente una serie

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

Ma questo non è l'ideale nel caso in cui voglio aggiungere altre categorie in futuro, e non devono preoccuparsi di aggiungendo un'altra categoria manualmente.

Qualsiasi aiuto sarebbe molto apprezzato :)

Edit - Soluzione

devo aver cercato nei posti sbagliati durante il mio oggetto discariche, ma alla fine ha visto i prefissi comune nel risultato restituito da un ListObjects chiamata con un delimitatore di '/', in questo modo:

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

Hai provato a usare l'elenco dei 'CommonPrefixes' tornato da' ListBucket'? https://docs.aws.amazon.com/AmazonS3/latest/dev/ListingKeysHierarchy.html –

+0

Originariamente non sono riuscito a trovare i prefissi comuni da nessuna parte, ma forse lo stavo ignorando durante i miei dump di oggetti nei posti sbagliati.Li ho appena trovati ora. Grazie per l'aiuto :) –

risposta

4

directory in realtà non esistono in Amazon S3. Tuttavia, la console di gestione consente la creazione di cartelle e i percorsi sono supportati per dare l'illusione delle directory.

Ad esempio, l'oggetto bar.jpg memorizzato nella directory foo ha un percorso di /foo/bar.jpg. Il trucco è che l'oggetto è in realtà chiamato foo/bar.jpg anziché solo bar.jpg. La maggior parte degli utenti non noterebbe nemmeno la differenza.

Dall'API, la possibilità di elencare le directory viene fornita tramite il concetto di CommonPrefixes, che ha lo stesso aspetto dei percorsi di directory e consiste nella porzione di nomi oggetto ("chiavi") prima della barra finale.

Vedi: Listing Keys Hierarchically Using a Prefix and Delimiter

Problemi correlati