S3Client.ListObjects zwraca tylko 1000 obiektów. Jak odzyskać listę wszystkich istniejących obiektów przy użyciu biblioteki Amazon C#?Jak wyświetlić _all_ obiektów w wiadrze Amazon S3?
Odpowiedz
Jak już wspomniano, Amazon S3 rzeczywiście wymaga Listing Keys Using the AWS SDK for .NET:
Jak wiadra może zawierać nieograniczoną liczbę klawiszy, gdy Pełne wyniki kwerendy lista może być bardzo duża. Aby zarządzać dużymi zestawami wyników o wartości , usługa Amazon S3 używa podziału na strony, aby podzielić je na kilka odpowiedzi w postaci . Każda odpowiedź na klucze listy zwraca stronę o wartości do 1000 000 znaków ze wskaźnikiem wskazującym, czy odpowiedź jest skrócona. Wysyłasz serię żądań kluczy list, aż otrzymasz wszystkie klucze .
Wspomniany wskaźnik właściwość z ObjectsResponse ClassNextMarker - jego wykorzystanie jest przedstawione w pełnym przykład Listing Keys Using the AWS SDK for .NET z odpowiednim fragmentem jest:
static AmazonS3 client;
client = Amazon.AWSClientFactory.CreateAmazonS3Client(
accessKeyID, secretAccessKeyID);
ListObjectsRequest request = new ListObjectsRequest();
request.BucketName = bucketName;
do
{
ListObjectsResponse response = client.ListObjects(request);
// Process response.
// ...
// If response is truncated, set the marker to get the next
// set of keys.
if (response.IsTruncated)
{
request.Marker = response.NextMarker;
}
else
{
request = null;
}
} while (request != null);
Zgodnie z dokumentacją klient używa paginacji w Przypadek, który opisujesz. Zgodnie z dokumentacją powinieneś użyć IsTruncated na wyniku ... jeśli jest to true
zadzwoń ponownie pod numer ListObjects
, aby poprawnie ustawić Marker
, aby uzyskać następną stronę itd. - przestań dzwonić, gdy IsTruncated
wróci false
.
Należy pamiętać, że odpowiedź powyżej nie stosuje zalecanej API do listy obiektów: http://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html
Poniższy fragment kodu pokazuje, jak to wygląda z nowym API:
using (var s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1))
{
ListObjectsV2Request request = new ListObjectsV2Request
{
BucketName = bucketName,
MaxKeys = 10
};
ListObjectsV2Response response;
do
{
response = await s3Client.ListObjectsV2Async(request);
// Process response.
// ...
request.ContinuationToken = response.NextContinuationToken;
} while (response.IsTruncated == true);
}
- 1. Publikowanie danych formularza na wiadrze Amazon S3
- 2. Amazon S3 boto: Jak zmienić nazwę pliku w wiadrze?
- 3. Node.js i Amazon S3: jak przeglądać wszystkie pliki w wiadrze?
- 4. Jak uzyskać poprzednią stronę obiektów listy w Amazon S3
- 5. Lista obiektów w określonym folderze na Amazon S3
- 6. Amazon S3 - Jak poprawnie budować adresy URL wskazujące obiekty w wiadrze?
- 7. Amazon S3 unikaj nadpisywania obiektów o tej samej nazwie
- 8. Dodaj folder w Amazon s3 bucket
- 9. Paperclip i Amazon S3 jak robić ścieżki?
- 10. Usunąć obiekt lub wiadro w Amazon S3?
- 11. Obiekt Amazon S3 Replikacja
- 12. Sprawdź, czy istnieje klucz z pewnym prefiksem w wiadrze Amazon S3
- 13. Jak zamontować amazon s3 na amazon ec2
- 14. Jak utworzyć obiekt S3 w wiadrze z jednym wywołaniem mgły?
- 15. PHP/Amazon S3: uwierzytelnianie ciągiem zapytań
- 16. Logowanie do Amazon S3
- 17. Architektura Amazon S3
- 18. Uprawnienia Amazon S3
- 19. Offline Amazon S3
- 20. Amazon S3 Url przepisać
- 21. SignatureDoesNotMatch - Amazon S3 API
- 22. Powielanie pliku w Amazon S3
- 23. usuwanie obiektów w s3 wykorzystujące wieloznaczny pasujące
- 24. Transfer regionalny Amazon S3?
- 25. Jak mogę programowo sprawdzić uprawnienia Amazon S3 za pomocą boto?
- 26. Jak mogę wykonać kopię zapasową lub zsynchronizować wiadro Amazon S3?
- 27. Błąd Amazon S3 CORS
- 28. git i Amazon s3
- 29. Url, aby uzyskać plik z Amazon S3
- 30. Jak mogę pobrać plik z php i Amazon S3 SDK?
Ponad 2 lata później i nadal idealne rozwiązanie dla mnie! Dzięki :) – hardba11
Doskonała odpowiedź ... –
Twój drugi link jest teraz zepsuty (Iterating Through Multi-Page Results) i można go znaleźć tutaj: http://docs.aws.amazon.com/AmazonS3/latest/dev/ ListingObjectKeysUsingNetSDK.html – adamdport