Как перечислить все объекты AWS S3 в ведре с помощью Java

Каков самый простой способ получить список всех элементов в ведре S3 с помощью Java?

List s3objects = s3.listObjects(bucketName,prefix).getObjectSummaries(); 

Этот пример возвращает только 1000 элементов.

Это может быть обходным решением, но это решило мою проблему:

 ObjectListing listing = s3.listObjects( bucketName, prefix ); List summaries = listing.getObjectSummaries(); while (listing.isTruncated()) { listing = s3.listNextBatchOfObjects (listing); summaries.addAll (listing.getObjectSummaries()); } 

Это прямо из документации AWS:

 AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider()); ListObjectsRequest listObjectsRequest = new ListObjectsRequest() .withBucketName(bucketName) .withPrefix("m"); ObjectListing objectListing; do { objectListing = s3client.listObjects(listObjectsRequest); for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) { System.out.println( " - " + objectSummary.getKey() + " " + "(size = " + objectSummary.getSize() + ")"); } listObjectsRequest.setMarker(objectListing.getNextMarker()); } while (objectListing.isTruncated()); 

Я обрабатываю большую коллекцию объектов, созданных нашей системой; мы изменили формат сохраненных данных и должны были проверить каждый файл, определить, какие из них были в старом формате, и преобразовать их. Есть и другие способы сделать это, но это относится к вашему вопросу.

  ObjectListing list = amazonS3Client.listObjects(contentBucketName, contentKeyPrefix); do { List summaries = list.getObjectSummaries(); for (S3ObjectSummary summary : summaries) { String summaryKey = summary.getKey(); /* Retrieve object */ /* Process it */ } list = amazonS3Client.listNextBatchOfObjects(list); }while (list.isTruncated()); 

Как немного более сжатое решение для включения объектов S3, когда они могут быть усечены:

 ListObjectsRequest request = new ListObjectsRequest().withBucketName(bucketName); ObjectListing listing = null; while((listing == null) || (request.getMarker() != null)) { listing = s3Client.listObjects(request); // do stuff with listing request.setMarker(listing.getNextMarker()); } 

Ключи листинга Использование AWS SDK для Java

http://docs.aws.amazon.com/AmazonS3/latest/dev/ListingObjectKeysUsingJava.html

 import java.io.IOException; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ListObjectsV2Request; import com.amazonaws.services.s3.model.ListObjectsV2Result; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; public class ListKeys { private static String bucketName = "***bucket name***"; public static void main(String[] args) throws IOException { AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider()); try { System.out.println("Listing objects"); final ListObjectsV2Request req = new ListObjectsV2Request().withBucketName(bucketName); ListObjectsV2Result result; do { result = s3client.listObjectsV2(req); for (S3ObjectSummary objectSummary : result.getObjectSummaries()) { System.out.println(" - " + objectSummary.getKey() + " " + "(size = " + objectSummary.getSize() + ")"); } System.out.println("Next Continuation Token : " + result.getNextContinuationToken()); req.setContinuationToken(result.getNextContinuationToken()); } while(result.isTruncated() == true ); } catch (AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, " + "which means your request made it " + "to Amazon S3, but was rejected with an error response " + "for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException, " + "which means the client encountered " + "an internal error while trying to communicate" + " with S3, " + "such as not being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } } } 

Серый ваше решение было странным, но вы похожи на хорошего парня.

 AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials( .... ObjectListing images = s3Client.listObjects(bucketName); List list = images.getObjectSummaries(); for(S3ObjectSummary image: list) { S3Object obj = s3Client.getObject(bucketName, image.getKey()); writeToFile(obj.getObjectContent()); } 

Я знаю, что это старый пост, но это все равно может быть полезно для всех: Java / Android SDK версии 2.1 предоставляет метод setMaxKeys. Как это:

 s3objects.setMaxKeys(arg0) 

Вероятно, вы нашли решение, но, пожалуйста, проверьте один ответ как правильный, чтобы он мог помочь другим в будущем.

Это сработало для меня.

 Thread thread = new Thread(new Runnable(){ @Override public void run() { try { List listing = getObjectNamesForBucket(bucket, s3Client); Log.e(TAG, "listing "+ listing); } catch (Exception e) { e.printStackTrace(); Log.e(TAG, "Exception found while listing "+ e); } } }); thread.start(); private List getObjectNamesForBucket(String bucket, AmazonS3 s3Client) { ObjectListing objects=s3Client.listObjects(bucket); List objectNames=new ArrayList(objects.getObjectSummaries().size()); Iterator oIter=objects.getObjectSummaries().iterator(); while (oIter.hasNext()) { objectNames.add(oIter.next().getKey()); } while (objects.isTruncated()) { objects=s3Client.listNextBatchOfObjects(objects); oIter=objects.getObjectSummaries().iterator(); while (oIter.hasNext()) { objectNames.add(oIter.next().getKey()); } } return objectNames; } 

Попробуйте это

 public void getObjectList(){ System.out.println("Listing objects"); ObjectListing objectListing = s3.listObjects(new ListObjectsRequest() .withBucketName(bucketName) .withPrefix("ads")); for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) { System.out.println(" - " + objectSummary.getKey() + " " + "(size = " + objectSummary.getSize() + ")"); } } 

Вы можете использовать все объекты в ведре с определенным префиксом.

  • Есть ли веская причина использовать «printf» вместо «print» в java?
  • Триггер 404 в controllerе Spring-MVC?
  • Как запустить JAR-файл
  • Синхронизация доступа к SimpleDateFormat
  • Как создать таблицу объединений с аннотациями JPA?
  • В Maven, зачем запускать mvn clean?
  • Изменить формат даты в строке Java
  • Как имитировать БД для тестирования (Java)?
  • Java JDBC - Как подключиться к Oracle с использованием Service Name вместо SID
  • Указатели функций в Java
  • Ошибка при установке Ant: ANT_HOME установлен неправильно
  • Interesting Posts
    Давайте будем гением компьютера.