簡體   English   中英

如何使用iOS SDK將AWS S3文件從一個存儲桶復制到另一個存儲桶

[英]How to copy an AWS S3 file from one bucket to another using iOS SDK

我正在使用AWS iOS SDK,並且能夠按照教程中所述進行上傳/下載文件操作。 現在,我正在嘗試從一個存儲桶中復制文件並將其粘貼到另一個存儲桶中。 我擁有兩個存儲桶,並可以使用它們。 我也想在復制文件后從第一個存儲桶中刪除文件(因此從技術上講這是剪切粘貼操作),但我假設要執行的方法是復制,粘貼和刪除原始文件。

經過一番挖掘后,似乎可以通過AWSS3 -uploadPartCopy:函數來實現。 似乎此函數使用了一個AWSS3UploadPartCopyRquest對象,該對象具有3個相關的輸入屬性,目標存儲桶(存儲桶),目標鍵(鍵)和源位置(replicateSource),這似乎是對象所在位置的URL被復制。

在我看來,這種功能的格式非常奇怪,而且我也不熟悉“上傳部件”的含義,即,它是否必須是多部分上傳的一部分? 在調用uploadPartCopy之前是否需要啟動分段上傳?

我也不確定這是解決該問題的方法。 對於一個相對簡單的任務來說,這似乎是一個過於復雜的解決方案。 我在正確的軌道上嗎?

只需參考下面的代碼。 它為您提供了將數據從一個存儲桶復制到另一個存儲桶的詳細信息。 就我而言,我想從同一個存儲桶中復制多個圖像。

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;
    }];

復制對象有兩種操作: PUT Object-CopyUpload Part-Copy 如果對象不太大,則更容易實現映射到- replicateObject: “ PUT對象-復制”。

另外,Amazon S3具有跨區域復制功能,如果您的兩個存儲桶不在同一區域,該功能將自動復制對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM