使用AFNetworking上传iOs Multiples文件

时间:2012-08-26 13:44:52

标签: ios xcode file-upload afnetworking

我正在为我的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"];

}

无论如何,当第一个请求完成时,我能够通过启动另一个请求来使其工作。 但我想有一种最佳方式让它运转起来?

坦克很多,

鲁道夫

3 个答案:

答案 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)

您应为每个文件指定不同的名称。我怀疑会解决它。

相关问题