2014-07-24 2 views
3

J'utilise AWS Java SDK pour interagir avec S3. Je veux parcourir tous les objets dans le stockage et récupérer les métadonnées de chaque objet. Je peux itérer les objets en utilisant des listes comme:Itération et récupération des métadonnées de tous les objets dans Amazon S3

ObjectListing list= s3client.listObjects("bucket name"); 

Mais je suis en mesure de récupérer des résumés seulement à travers l'objet dans la liste. Au lieu de résumé j'ai besoin de métadonnées de chaque objet, comme celle fournie par la méthode getObjectMetadata() dans la classe S3Object. Comment je reçois ça?

Répondre

4

Vous pouvez obtenir quatre métadonnées par défaut de objectSummary qui est revenu de lisObject: Last Modified, Storage Type, Etag and Size.

Pour obtenir des métadonnées d'objets, vous devez effectuer HEAD object demande sur l'objet ou vous appel suivant la méthode de votre objet:

GetObjectMetadataRequest(String bucketName, String key) 

Regardez ceci:

ListObjectsRequest listObjectsRequest = new ListObjectsRequest() 
        .withBucketName(bucketName); 
      ObjectListing objectListing; 
      do { 
       objectListing = s3client.listObjects(listObjectsRequest); 
       for (S3ObjectSummary objectSummary 
         : objectListing.getObjectSummaries()) { 
        /** Default Metadata **/ 
        Date dtLastModified = objectSummary.getLastModified(); 
        String sEtag = objectSummary.getETag(); 
        long lSize = objectSummary.getSize(); 
        String sStorageClass = objectSummary.getStorageClass(); 
        /** To get user defined metadata **/ 
        ObjectMetadata objectMetadata = s3client.getObjectMetadata(bucketName, objectSummary.getKey()); 
        Map userMetadataMap = objectMetadata.getUserMetadata(); 
        Map rowMetadataMap = objectMetadata.getRawMetadata(); 
       } 
       listObjectsRequest.setMarker(objectListing.getNextMarker()); 
      } while (objectListing.isTruncated()); 

Pour plus de détails sur GetObjectMetadataRequest, regardez ceci link.