我正在使用BFTask和v2为iOS上传和下载文件到AWS S3存储。下面的代码运行得很好,但我想知道是否有人知道我如何才能更好地控制上传的最大数量,并更好地接收上传进度的反馈。我已经阅读了AWS 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的数组。非常感谢您的建议。谢谢!
发布于 2014-08-29 00:56:36
AWSRequest是AWSS3TransferManagerUploadRequest的一个超类,具有名为uploadProgress和downloadProgress的属性。您可以实现AWSNetworkingUploadProgressBlock和AWSNetworkingDownloadProgressBlock来检索进度反馈。
将并发上传的次数限制为3的一种方法是并行地执行三个任务。您可以将在序列中与组合在这个博客帖子的并行部分中。
https://stackoverflow.com/questions/25556729
复制相似问题