2013-08-28 105 views
9

我想上传一些图片到服务器,所以我使用AFNetWork来发布文件。 代码在这里:AFNetworking多个文件上传

UIImage *image1 = [UIImage imageNamed:@"about_app"]; 
UIImage *image2 = [UIImage imageNamed:@"alter"]; 
NSArray *array = @[image1,image2]; 
__block int i = 0; 
NSMutableURLRequest *request = [[AFNetWorkSingleton shareInstance] multipartFormRequestWithMethod:@"POST" path:@"Mindex/getimg" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>formData){ 
for(UIImage *eachImage in array) 
{ 
    NSData *imageData = UIImageJPEGRepresentation(eachImage,0.5); 
    [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i ] fileName:[NSString stringWithFormat:@"abc%d.jpg",i ] mimeType:@"image/jpeg"]; 
    i++; 
} 
}]; 

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){.....} 

这不行! 但是,当我使用下面的代码替换multipartFormRequestWithMethod方法内的“for”语句时,所有的事情都是正确的!但如果我无法确认图像数组的数量,我必须使用“for”语句,我的代码有问题吗?

[formData appendPartWithFileData:UIImageJPEGRepresentation([array objectAtIndex:0], 0.5) name:@"image1" fileName:@"image1.jpg" mimeType:@"image/jpeg"]; 
[formData appendPartWithFileData:UIImageJPEGRepresentation([array objectAtIndex:1], 0.5) name:@"image2" fileName:@"image2.jpg" mimeType:@"image/jpeg"]; 

回答

12

将变量i放在块内。还将文件名称从abc更改为file

UIImage *image1 = [UIImage imageNamed:@"about_app"]; 
UIImage *image2 = [UIImage imageNamed:@"alter"]; 
NSArray *array = @[image1,image2]; 

NSMutableURLRequest *request = [[AFNetWorkSingleton shareInstance] multipartFormRequestWithMethod:@"POST" path:@"Mindex/getimg" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>formData){ 
int i = 0; 
for(UIImage *eachImage in array) 
{ 
    NSData *imageData = UIImageJPEGRepresentation(eachImage,0.5); 
    [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i ] fileName:[NSString stringWithFormat:@"file%d.jpg",i ] mimeType:@"image/jpeg"]; 
    i++; 
} 
}]; 
4

只是改变了循环语法

UIImage *image1 = [UIImage imageNamed:@"about_app"]; 
    UIImage *image2 = [UIImage imageNamed:@"alter"]; 
    NSArray *array = @[image1,image2]; 

    NSMutableURLRequest *request = [[AFNetWorkSingleton shareInstance] multipartFormRequestWithMethod:@"POST" path:@"Mindex/getimg" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>formData){ 
    for(int i=0;i<[array count];i++) 
    { 
     UIImage *eachImage = [array objectAtIndex:i]; 
     NSData *imageData = UIImageJPEGRepresentation(eachImage,0.5); 
     [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i ] fileName:[NSString stringWithFormat:@"abc%d.jpg",i ] mimeType:@"image/jpeg"]; 
    } 
    }]; 

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){.....} 
+0

如果我想要一个* *名称**可以包含多个文件? – chenzhongpu

-3

对于上载任何类型的文件到服务器,设置mime类型为 - >文件/ *

[formData appendPartWithFileData:Data 
          name:@"keyName" 
          fileName:@"yourFileName"  
          mimeType:@"file/*"]; 
+0

你回答的不是我所要求的。 – lixiaoyu