ios - 使用 BFTask 和 AWS SDK iOS v2 控制上传到 S3

标签 ios objective-c amazon-web-services amazon-s3

我正在使用 BFTask连同 AWS SDK v2用于 iOS 将文件上传和下载到 AWS S3 存储。以下代码运行良好,但我想知道是否有人知道我如何才能更好地控制允许的最大上传数量,以及如何更好地接收上传进度反馈。我已经阅读了 AWS SDK v2 的文档、源代码和 BFTask 自述文件,但我仍然不确定如何获得控制权。例如,我将如何编辑以下代码以将同时运行的 BFTasks 的数量限制为 3,并且还接收当前上传的字节数而不是总字节数?

-(void) uploadAllFileRequests
{
    AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];
    __block int uploadCount = 0;
    __block int uploadSuccess= 0;
    __block int uploadFailure= 0;

    NSMutableArray *tasks = [NSMutableArray new];
    unsigned long totalnumberoffiles=self.arrayOfUploadRequests.count;

    for (__block AWSS3TransferManagerUploadRequest *uploadRequestLocal in self.arrayOfUploadRequests)
    {

        [tasks addObject:[[transferManager upload:uploadRequestLocal] continueWithBlock:^id(BFTask *task) {
            if (task.error != nil) {
                 if( task.error.code != AWSS3TransferManagerErrorCancelled
                   &&
                   task.error.code != AWSS3TransferManagerErrorPaused
                   )
                {
                    NSLog(@"ERROR: %@",StatusLabelFailed);
                    uploadFailure ++;
                }
            } else {
                uploadCount ++;
                uploadSuccess ++;
                NSLog(@"ETag: %@           %@ : %3.2f",[task.result valueForKey:@"ETag"], StatusLabelUploading, (uploadCount*1.0/totalnumberoffiles)*100.);
            }
            return nil;     
        }]];
    }
    [[BFTask taskForCompletionOfAllTasks:tasks] continueWithSuccessBlock:^id(BFTask *task)
     {
         NSLog(@"Finished:  Success: %i - Failed: %i  -",uploadSuccess,uploadFailure);
         return nil;
     }];
}

这里的 self.arrayOfUploadRequests 是一个包含 AWSS3TransferManagerUploadRequest 的数组。非常感谢您的建议。谢谢!

最佳答案

AWSRequestAWSS3TransferManagerUploadRequest 的父类(super class),具有名为 uploadProgressdownloadProgress 的属性。您可以实现 AWSNetworkingUploadProgressBlockAWSNetworkingDownloadProgressBlock 来检索进度反馈。

将并发上传数量限制为三个的一种方法是按顺序并行执行三个任务。您可以组合此 blog post按顺序按并行 部分.

关于ios - 使用 BFTask 和 AWS SDK iOS v2 控制上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556729/

相关文章:

iphone - 如何根据所有经纬度的值设置 map 的缩放级别,以便我可以看到 iPhone map 中的所有地点?

c++ - AWS 上的 GLIBCXX 版本错误

iOS Eureka 创建后更改节标题

ios - 为 iOS 模拟器创建一个 dylib

ios - 通过 simctl 安装 WatchKit 应用程序

ios - 属性属性 'nonnull' 和 'weak' 是互斥的

ios - XMLReader Xcode 错误

amazon-web-services - Docker 私有(private)注册表 : ping attempt failed

amazon-web-services - Amazon VPC 中的 Puppet Behavior 不一致

ios - 不遵循 QoS 优先级的队列