3

我正在为我的 iPhone 项目使用 AFnetworking,我是 Objective C 的初学者。

我知道如何使用块上传多个文件,如此处所述: 如何使用 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"];

}

无论如何,当第一个请求完成时,我可以通过启动另一个请求来使其工作。但我想有一个最好的方法让它工作吗?

坦克很多,

鲁道夫

4

3 回答 3

3

AFNetworking 有几个很好的实用程序来管理“一批”请求。您应该特别考虑 AFHTTPClient 类中的 3 种方法:

enqueueBatchOfHTTPRequestOperationsWithRequests //批处理 enqueueBatchOfHTTPRequestOperations //批处理 enqueueHTTPRequestOperation //单个请求

基本上,您将遍历您的照片数组并构建一个新的 NSMutableURLRequest (s) 数组(就像您现在可能正在做的那样)。对于每张照片,创建一个 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 子类并将其构建为单例。您不必以这种方式使用它,但如果您有多种类型的连接返回到同一主机或服务,它会非常方便。我发现它在我的上一个项目中非常有用,并且取得了很好的成功。

希望对你有帮助

于 2012-08-26T18:26:31.883 回答
0

试试 ASIHTTPRequest 库。使用这个库,您可以同时或一个一个地下载/上传多个文件:http: //allseeing-i.com/ASIHTTPRequest/How-to-use

于 2012-08-26T14:13:46.257 回答
0

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

于 2012-10-01T20:58:26.117 回答