2016-03-25 141 views
0

我正在使用AWS iOS SDK,並且已經能夠執行教程中概述的上載/下載文件操作。現在我試圖從一個存儲桶複製文件並將其粘貼到另一個存儲桶中。我擁有兩個桶並可以訪問它們。我也想在複製後從第一個桶中刪除文件(所以在技術上這是一個剪切粘貼操作),但我假設這樣做的方式是複製,粘貼,刪除原件。如何使用iOS SDK將AWS S3文件從一個存儲桶複製到另一個存儲區

經過一番挖掘,似乎要做到這一點的方式是通過AWSS3 -uploadPartCopy:函數。看起來這個函數使用了一個AWSS3UploadPartCopyRquest對象,該對象有3個相關的輸入屬性,目標桶(桶),目標鍵(鍵)和源位置(replicateSource),它似乎是對象位置的URL被複制。

在我看來,這似乎是一個非常奇怪的格式,對於這樣一個功能,我也不太瞭解上傳部件的意思,即它是否必須是多部分上傳的一部分?在調用uploadPartCopy之前是否需要啓動多部分上傳?

我也不確定這是怎麼回事。這似乎是一個相對簡單的任務過於複雜的解決方案。我在正確的軌道上嗎?

回答

0

複製對象有兩種操作:PUT Object - CopyUpload Part - Copy。如果對象不太大,映射到- replicateObject:的「PUT Object - Copy」更容易實現。

此外,Amazon S3具有Cross-Region Replication功能,如果兩個存儲桶不在同一個區域中,則會自動複製對象。

+0

我覺得我在這裏失去了一些東西;您提供的鏈接解釋了這些操作在其他語言中的工作方式。我試圖從iOS應用程序和iOS SDK執行此操作。 – sts54

0

請參閱下面的代碼。它爲您提供了從一個桶到另一個桶的複製數據的詳細信息。在我的情況下,我想複製來自同一個桶的多個圖像。

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; 
    }]; 
相關問題