如果尚未上传文件,如何将文件上传到S3?

时间:2016-12-16 17:02:08

标签: java android ios amazon-web-services amazon-s3

我正在使用AWS Transfer Manager将大量文件备份到S3。有时备份在中间中间失败,我不想重新上传所有文件,只是那些尚未上传的文件。

传输管理器或S3 Put Request中是否存在可以自动执行此操作的内容,或者是我首先使用HEAD请求检查文件的MD5的唯一解决方案,并在启动之前查看它是否有所不同上传。

谢谢!

2 个答案:

答案 0 :(得分:0)

你可以使用continue with block来做到这一点。对于每次上传,您都可以在失败的上传案例中定义重试策略。例如:

    [[transferManager upload:uploadRequest] continueWithBlock:^id(AWSTask *task) {
        if (task.error){
            // Handle failed upload here
        }

        if (task.result) {
            //File uploaded successfully.
        }
        return nil;
    }];

您还可以创建任务列表,然后使用

NSMutableArray *tasks = [NSMutableArray new];    
AWSTask * taskForUpload = [transferManager upload:uploadRequest];
[tasks addObject:taskForUpload];
// add more tasks as required    
[[AWSTask taskForCompletionOfAllTasks:tasks] continueWithBlock:^id(AWSTask *task) {
                        if (task.error != nil) {
                            // Handler error / failed uploads here
                        } else {
                            // Handle successful uploads here
                        }                        
                        return nil;
                    }];

这将执行列表中的所有任务,然后为您提供可以重试的错误列表。

谢谢, 罗汉

答案 1 :(得分:0)

您可以使用AWS Command-Line Interface (CLI)将文件复制或同步到Amazon S3,而不是编写自己的解决方案。

例如:

aws s3 sync <directory> s3://my-bucket/<directory>

sync命令仅复制不在目标中的文件。因此,只需定期运行它,它会将所有文件复制到S3存储桶中!