如何使用iOS SDK将AWS S3文件从一个存储桶复制到另一个存储桶

问题描述 投票:0回答:2

我正在使用AWS iOS SDK,并且能够执行教程中概述的上载/下载文件操作。现在我正在尝试从一个存储桶复制文件并将其粘贴到另一个存储桶中。我拥有两个桶并可以访问它们。我还想在复制之后从第一个桶中删除该文件(所以从技术上讲这是一个剪切粘贴操作)但我假设这样做的方法是复制,粘贴,删除原始文件。

经过一些挖掘,似乎这样做的方法是通过AWSS3 -uploadPartCopy:函数。看起来这个函数使用了一个AWSS3UploadPartCopyRquest对象,它有3个相关的输入属性,目标存储桶(存储桶),目标密钥(密钥)和源位置(replicateSource),它似乎是对象位置的URL被复制。

在我看来这对于这样一个函数来说是一个非常奇怪的格式,而且我也不熟悉上传一个部分意味着什么,即这是否必须是多部分上传的一部分?在调用uploadPartCopy之前,是否需要启动多部分上传?

我也不确定这是怎么回事。对于相对简单的任务来说,这似乎是一个过于复杂的解决方案。我在这里走在正确的轨道上吗?

ios amazon-web-services amazon-s3
2个回答
1
投票

请参阅下面的代码。它可以让您详细了解从一个桶到另一个桶的复制数据。在我的情况下,我想从同一个桶中复制多个图像。

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

0
投票

复制对象有两种操作:PUT Object - CopyUpload Part - Copy。如果对象不是太大,则映射到- replicateObject:的“PUT Object - Copy”更容易实现。

此外,Amazon S3具有Cross-Region Replication功能,如果您的两个存储桶不在同一区域,它会自动复制对象。

© www.soinside.com 2019 - 2024. All rights reserved.