2013-08-28 13 views
9

Ich möchte einige Bilder auf den Server hochladen, also verwende ich AFNetWork, um die Dateien zu posten. Der Code ist hier:AFNetworking mehrere Dateien hochladen

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

das funktioniert nicht! Aber wenn ich den Code unten verwende, um die "for" -Anweisung in multipartFormRequestWithMethod Methode zu ersetzen, gingen alle Dinge richtig! aber wenn ich die Anzahl der Bild-Array nicht bestätigen konnte, muss ich "for" -Anweisung verwenden, stimmt etwas mit meinem Code nicht?

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

Antwort

12

Setzen Sie die Variable i in den Block. Außerdem wurde der Dateiname von abc in file geändert.

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

nur die for-Schleife Syntax ändern

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

Wenn ich will, das ein * * Name ** kann mehrere Dateien enthalten? – chenzhongpu

-3

Für jede Art von Datei auf dem Server hochladen, einstellen mimt als -> Datei/*

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

Was Sie beantwortet haben, ist nicht das, was ich gefragt habe. – lixiaoyu

Verwandte Themen