Ho bisogno di elencare tutti i file contenuti in una determinata cartella contenuta nel mio bucket S3.Elenco dei file in una "cartella" specifica di un bucket AWS S3
struttura La cartella è la seguente
/my-bucket/users/<user-id>/contacts/<contact-id>
devo file relativi a utenti e file relativi a contatto di un certo utente. Ho bisogno di elencarli entrambi.
per elencare i file che sto usando questo codice:
ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName("my-bucket")
.withPrefix("some-prefix").withDelimiter("/");
ObjectListing objects = transferManager.getAmazonS3Client().listObjects(listObjectsRequest);
per elencare i file di un certo utente Sto usando questo prefisso:
users/<user-id>/
e sto correttamente ottenere tutto file nella directory esclusa la sottodirectory contacts
, ad esempio:
users/<user-id>/file1.txt
users/<user-id>/file2.txt
users/<user-id>/file3.txt
per elencare i file di un certo contatto utente invece sto usando questo prefisso:
users/<user-id>/contacts/<contact-id>/
ma in questo caso mi sto anche la directory stesso come un oggetto restituito:
users/<user-id>/contacts/<contact-id>/file1.txt
users/<user-id>/contacts/<contact-id>/file2.txt
users/<user-id>/contacts/<contact-id>/
Perché sto ottenendo questo comportamento? Qual è la differenza tra le due richieste di quotazione? Ho bisogno di elencare solo i file nella directory, escluse le sottodirectory.
Questo comportamento è previsto se in realtà è stata creata la "cartella vuota" nella console, poiché tale azione crea effettivamente un oggetto vuoto con la chiave 'percorso/alla/mia/cartella /' così la console ha un segnaposto. Lo hai fatto mentre testavi? –
@ Michael-sqlbot Non ho creato nessuna cartella vuota. Infatti tutti i file vengono caricati dall'applicazione utilizzando la struttura delle cartelle che ho segnalato come prefisso per la chiave del file. – davioooh
Si potrebbe voler provare un 'GET' sull'oggetto apparente con barra finale, quindi, perché se non si crea una cartella e si utilizzava il'/'delimitatore' withDelimiter ("/") 'quando si elencano gli oggetti , questo dovrebbe significare che in effetti hai un oggetto chiamato con una barra finale, probabilmente a causa di un bug nel tuo codice che ne ha creato uno in quel modo. Un tale oggetto sarebbe probabilmente invisibile nella console. –