2016-03-25 5 views
0

Ich verwende das AWS iOS SDK und konnte die Upload-/Download-Dateivorgänge wie in den Lernprogrammen beschrieben durchführen. Jetzt versuche ich eine Datei aus einem Bucket zu kopieren und in einen anderen einzufügen. Ich besitze beide Eimer und habe Zugang zu ihnen. Ich möchte auch die Datei aus dem ersten Eimer nach dem Kopieren löschen (also technisch ist dies eine Ausschneiden-Einfügen-Operation), aber ich nehme an, die Art zu tun, ist das Kopieren, Einfügen, Löschen des Originals.So kopieren Sie eine AWS S3-Datei mithilfe des iOS-SDKs von einem Bucket in einen anderen

Nach etwas graben scheint es, als ob der Weg dies durch die AWSS3-uploadPartCopy: -Funktion ist. Es scheint, als ob diese Funktion ein AWSS3UploadPartCopyRquest-Objekt verwendet, das über drei relevante Eingabeeigenschaften verfügt: den Ziel-Bucket (Bucket), den Zielschlüssel (Schlüssel) und den Quellspeicherort (replicateSource), der eine URL für den Speicherort des Objekts zu sein scheint kopiert werden.

Das scheint mir ein wirklich seltsames Format für eine solche Funktion zu sein, und ich weiß auch nicht, was das Hochladen eines Teils bedeutet, d. H. Muss das Teil eines mehrteiligen Uploads sein? Muss ich einen mehrteiligen Upload starten, bevor ich uploadPartCopy aufruft?

Ich bin mir auch nicht sicher, dass dies der Weg ist, darüber zu gehen. Es scheint eine überkomplizierte Lösung für eine relativ einfache Aufgabe zu sein. Bin ich hier richtig?

Antwort

0

Es gibt zwei Vorgänge zum Kopieren eines Objekts: PUT Object - Copy und Upload Part - Copy. Wenn das Objekt nicht zu groß ist, ist "PUT Object - Copy", das auf - replicateObject: gemappt wird, einfacher zu implementieren.

Außerdem verfügt Amazon S3 über die Funktion Cross-Region Replication, mit der Objekte automatisch repliziert werden, wenn sich die beiden Buckets nicht in derselben Region befinden.

+0

Ich fühle mich wie etwas hier fehlt; Die von Ihnen bereitgestellten Links erklären, wie diese Operationen in einer anderen Sprache funktionieren. Ich versuche, diesen Vorgang über eine iOS-App mit dem iOS SDK auszuführen. – sts54

0

Siehe unten Code. Es gibt Ihnen eine Idee im Detail für das Kopieren von Daten von einem Eimer zu einem anderen. In meinem Fall möchte ich mehrere Bilder aus demselben Bucket kopieren.

NSString *sourceBucket = @"treedev1234"; 

NSString *destinationBucket = @"treedev1234"; 

AWSS3 *s3 = [AWSS3 defaultS3]; 
AWSS3ReplicateObjectRequest *replicateRequest = [AWSS3ReplicateObjectRequest new]; 

for(int i = 0;i<feedModel.imageCount;i++){ 
    replicateRequest.bucket = destinationBucket; 
    replicateRequest.key = [NSString stringWithFormat:@"posts/%d/%d.jpg",newpostid,i]; 
    replicateRequest.replicateSource = [NSString stringWithFormat:@"%@/posts/%d/%d.jpg",sourceBucket,oldpostid,i]; 
    replicateRequest.ACL = AWSS3ObjectCannedACLPublicReadWrite; 

    [[s3 replicateObject:replicateRequest] continueWithBlock:^id(AWSTask *task) { 
     if(task.error) 
     NSLog(@"The share request failed. error: [%@]", task.error); 
     return nil; 
    }]; 
Verwandte Themen