我正在为我的iPhone项目使用AFnetworking,我是Objective C的初学者。
我知道如何使用块上传多个文件,如下所述: How do you upload multiple files with AFNetworking
因此,我们可以在块中添加任意数量的formData元素。
但在我的情况下,我不知道我将拥有多少张照片,因为用户可以自由选择多张。图片的数据存储在一个数组中。
所以我在块中尝试了类似的东西,但只上传了最后一个元素:
for(NSDictionary *dict in imagesInfo) {
UIImage *theFile = [dict objectForKey:UIImagePickerControllerOriginalImage];
NSData *imageData = UIImageJPEGRepresentation(theFile, 0.5);
[formData appendPartWithFileData:imageData name:@"name" fileName:@"name.jpg" mimeType:@"image/jpeg"];
}
无论如何,当第一个请求完成时,我能够通过启动另一个请求来使其工作。 但我想有一种最佳方式让它运转起来?
坦克很多,
鲁道夫
答案 0 :(得分:3)
AFNetworking有一些很好的实用程序来管理“批量”请求。您应该从AFHTTPClient类中考虑3种方法:
enqueueBatchOfHTTPRequestOperationsWithRequests //批次 enqueueBatchOfHTTPRequestOperations //批次 enqueueHTTPRequestOperation //用于单个请求
基本上,你会遍历你的照片数组并构建一个新的NSMutableURLRequest数组(就像你现在可能正在做的那样)。对于每张照片,创建NSMutuableURLRequest或HTTPRequestOperation并将其弹出数组。使用上述方法之一将新的HTTP URL请求数组传递给AFNetworking。
如果要作为批处理方式管理上载过程,请使用其中一种批处理方法。如果您只是想要解雇并忘记,请使用enqueueHTTPRequestOperation,它仍能为您提供所有AFNetworking的快乐。
它看起来像这样:
AFHTTPClient *photoUploader = [[AFHTTPClient alloc] init];
[photoUploader enqueueBatchOfHTTPRequestOperationsWithRequests:self.photosWrappedInNSURLS progressBlock:^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations) {
//block gets called after each succesful operation
//useful for messages like 1 of 3 complete
} completionBlock:^(NSArray *operations) {
//block gets called after all requests are complete
}];
如果您阅读了文档,他们会建议您创建自己的AFHTTPClient子类并将其构建为单例。您不必以这种方式使用它,但如果您有多种类型的连接回到同一主机或服务,则非常方便。我发现它在我的上一个项目中非常有用,并且取得了很好的成功。
希望有所帮助 好吧答案 1 :(得分:0)
尝试ASIHTTPRequest库。使用此库,您可以同时或逐个下载/上传多个文件:http://allseeing-i.com/ASIHTTPRequest/How-to-use
答案 2 :(得分:0)
您应为每个文件指定不同的名称。我怀疑会解决它。