繁体   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