我正在使用AWS Transfer Manager将大量文件备份到S3。有时备份在中间中间失败,我不想重新上传所有文件,只是那些尚未上传的文件。
传输管理器或S3 Put Request中是否存在可以自动执行此操作的内容,或者是我首先使用HEAD请求检查文件的MD5的唯一解决方案,并在启动之前查看它是否有所不同上传。
谢谢!
答案 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存储桶中!