2012-02-17 8 views
12

Używam zestawu SDK AWS IOS i próbuję wyświetlić listę wszystkich plików w FOLDERZE.Amazon AWS IOS SDK: jak wyświetlić listę WSZYSTKICH nazw plików w FOLDERZE

Ten kod działa do listy wszystkich plików itp w wiadrze:

-(void) s3DirectoryListing: (NSString *) bucketName { 

    s3Client = [[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY withSecretKey:SECRET_KEY]; 

    @try { 

     S3ListObjectsRequest *req = [[S3ListObjectsRequest alloc] initWithName:bucketName]; 

     S3ListObjectsResponse *resp = [s3Client listObjects:req]; 

     NSMutableArray* objectSummaries = resp.listObjectsResult.objectSummaries; 

     for (int x = 0; x < [objectSummaries count]; x++) { 
      NSLog(@"objectSummaries: %@",[objectSummaries objectAtIndex:x]); 
     } 
    } 
    @catch (NSException *exception) { 
    NSLog(@"Cannot list S3 %@",exception); 
} 

} 

Więc jeśli mijam nazwę bucketName, to działa. Jednak gdy próbuję i przekazać bucketName/NazwaFolderu „pojawia się komunikat o błędzie. Kod ten nie wydaje się podoba połączenie kombinacji wiadro i ścieżkę foldera.

Wszelkie pomysły mile widziane.

Odpowiedz

21

Amazon S3 jest” płaski”system plików, co oznacza, że ​​nie ma folderów fizycznych.«foldery», jak wiesz, są po prostu prefiksy dodane do nazwy pliku.

Musisz ustawić właściwość prefix na żądanie (patrz documentation)

Na przykład, biorąc pod uwagę następujący zestaw plików:

folderName1/fileNameA.txt
folderName1/fileNameB.txt
folderName2/folderName3/fileNameC.txt

Jeśli ustawisz prefix z folderName1, a twoja delimiter z /, należy uzyskać tylko pierwsze dwa wpisy.

Last but not least, należy pozostawić bucketName tylko z nazwy wiadro :)

Więcej informacji na S3 Developer Guide.

+0

Fantastyczne. Dzięki Viccari – Jeremy

+6

Aby to zadziałało, musisz ustawić prefiks na "folderName1 /". Przed odczytaniem dokumentu nie było to tak oczywiste, że przedrostek musi zawierać ogranicznik, aby działał ... – vdaubry

+1

Kolejna rzecz, na którą należy zwrócić uwagę: Zestaw wyników jest obcięty w 1000. Sprawdź flagę isTruncated i uruchom kolejne żądania z znacznikiem do oznaczenia ostatniego otrzymanego przedmiotu. – Stavash

Powiązane problemy