2013-08-28 7 views
9

Desidero caricare alcune immagini nel server, quindi utilizzo AFNetWork per pubblicare i file. Il codice è qui:AFNetworking multiplo upload di file

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){.....} 

questo non è un lavoro! Ma quando uso il codice qui sotto per sostituire l'istruzione "for" all'interno del metodo multipartFormRequestWithMethod, tutto è andato bene! ma se non potessi confermare il conteggio dell'array di immagini, dovrò usare l'istruzione "for", qualcosa di sbagliato nel mio codice?

[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"]; 

risposta

12

Mettere la variabile i all'interno del blocco. Ha anche cambiato il nome del file da abc a 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

basta cambiare la sintassi ciclo

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

Se voglio quello * * nome ** può contenere più file? – chenzhongpu

-3

Per caricare qualsiasi tipo di file da server, impostare mimeType come -> file/*

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

quello che hai risposto non è per quello che ho chiesto. – lixiaoyu