2016-08-09 4 views
1

ich nur die Dateien in einem bestimmten Verzeichnis in Amazon S3, Mein Dateipfadnur Dateien löscht mit S3 DeleteObject halte Verzeichnisstruktur intakt

s3://{s3_bucket}/folder1/sub-folder2/sub-folder3/sub-folder4/sub-folder5/sub-folder6/sub-folder7/sub-folder8/sub-folder9/file.txt 

ich den folgenden Code wird wie folgt löschen muß, verwenden das löschte Dateien allein aus der obigen Verzeichnisstruktur

public static void deleteFilesInDirectory(String bucketName, String prefix) {  
     String delimiter = "/"; 
     if (!prefix.endsWith(delimiter)) { 
      prefix += delimiter; 
     } 
     ListObjectsRequest listObjectsRequest = new ListObjectsRequest() 
       .withBucketName(bucketName).withPrefix(prefix); 

     ObjectListing objects = s3client.listObjects(listObjectsRequest);  
     for(S3ObjectSummary summary:objects.getObjectSummaries()) 
     { 
      if(!summary.getKey().endsWith("/")) 
      { 
      s3client.deleteObject(bucketName, summary.getKey()); 
      }   
     }  
    } 

der obige Code das Verzeichnis Unter Ordner3/Unter Folder4/Unter Folder5/Unter folder6/Unter folder7/Unter folder8/Unter folder9/

gelöscht

Aber ich brauche die obige Verzeichnisstruktur.

Ist mein Verständnis von api richtig ist, kann mir jemand helfen mit diesem

Gibt es eine andere alternative nur die Dateien, die unter einem bestimmten s3 Verzeichnis java zu löschen?

Antwort

6

S3 hat keine Verzeichnisstruktur. Es ist ein völlig flaches Dateisystem. Ein Objekt namens foo/bar ist genau das: ein Objekt mit dem Namen foo/bar, kein Objekt namens bar in einem Verzeichnis mit dem Namen foo. Wenn Sie foo/bar löschten und es keine anderen Objekte im Bucket gab, die mit der Zeichenfolge foo/ begannen, sah es so aus, als wäre das "Verzeichnis" foo gelöscht worden, aber es existierte nie an erster Stelle. Um also ein Objekt mit dem Namen foo/bar erneut zu erstellen, müssen Sie zunächst kein Verzeichnis mit dem Namen foo/ erstellen. Erstellen Sie einfach ein Objekt mit dem Namen foo/bar.

0

Ein "Schlüssel" in S3 ähnelt einem Dateipfad:

http://bucket.s3.amazonaws.com/some/path/to/use ... in einem Eimer genannt Eimer ist und einen Schlüssel einiger/path/to/Verwendung.

Es ist eigentlich kein Pfad, da es keine Ordner gibt. Der S3-Schlüssel ist nur der Dateiname für eine Datei in einem großen Verzeichnis (der gesamte Bucket). S3-Schlüssel können/enthalten, haben jedoch keine besondere Bedeutung.

Mit anderen Worten, ein Objekt namens some/object sagt nichts über das Objekt some (es kann sein oder nicht - die zwei Objekte sind nicht verwandt).

Sie können jedoch Schlüssel mit einem bestimmten Präfix anfordern, also könnte ich sagen: "Gib mir alle Schlüssel beginnend mit/Pfad/zu/und es wird einige/path/to/use zurückgegeben. Es sieht aus wie" listet ein Verzeichnis“, aber es ist wirklich nur fragen, für Dateien, die mit einem bestimmten Zeichenkette beginnen

EDIT:.

ich die JavaDocs sah und dies ist die Funktion Unterschrift I (für AmazonS3Client) siehe:

public void deleteObject(java.lang.String bucketName, 
        java.lang.String key) 
       throws AmazonClientException, 
        AmazonServiceException 
Verwandte Themen