我正在使用 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
的数组。非常感谢您的建议。谢谢!
最佳答案
AWSRequest
是 AWSS3TransferManagerUploadRequest
的父类(super class),具有名为 uploadProgress
和 downloadProgress
的属性。您可以实现 AWSNetworkingUploadProgressBlock
和 AWSNetworkingDownloadProgressBlock
来检索进度反馈。
将并发上传数量限制为三个的一种方法是按顺序并行执行三个任务。您可以组合此 blog post 的按顺序 和按并行 部分.
关于ios - 使用 BFTask 和 AWS SDK iOS v2 控制上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556729/