2012-08-26 46 views
3

我使用AFnetworking为我的iPhone项目,我是一个初学者在Objective C.IOS倍数文件上传与AFNetworking

我知道如何使用块上传倍数文件,描述在这里: 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

您是否尝试过改变每个附件的名称和文件名? –

回答

0

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

+2

我看这是“如果你不知道如何与现代图书馆做到这一点,则应该弄清楚如何与被废弃的一个做到这一点。”这是可怕的建议。 –

+1

许多人仍然在他们的项目中使用这个“不赞成”的图书馆。它适用于现在所有版本的iOS。 – Tutankhamen

+4

就这样,问题表明他们已经在使用图书馆,并想知道如何使用它。再次告诉他们如何用**不同的**和不支持的库来做到这一点是没有用的。 –

3

AFNetworking有一些很好的工具,用于管理请求的“批次”。有3种方法尤其是你应该从AFHTTPClient类考虑:

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的子类,并建立它作为一个单例。您不必以这种方式使用它,但如果您有多种类型的连接返回到相同的主机或服务,则非常方便。我发现它在我上一个项目中非常有用,并且取得了非常好的成功。

希望帮助 很好

+0

谢谢,我会看看! – user1625861

0

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