Envoi de plus d'une image avec AFNetworking

Je développe une application de messagerie, et les users peuvent également envoyer des images les uns aux autres.
Quand un user envoie plus d'une image je les envoie en parallèle (je n'attends pas que le premier finisse de download avant d'envoyer le second)

Avant de passer à AFNetworking j'ai réussi à le faire avec ASIFormDataRequest , et en effet, si j'ai envoyé 2 images, les deux ont été transmises en parallèle et transmises avec succès à l'autre user.

Quand j'essaye de faire cela avec AFNetworking, j'ai un comportement étrange.
Je vais essayer de décrire le cas où user1 envoie deux images aussi user2:

  1. User1 envoyer image1 -> tout semble ok, je peux voir la progression du téléchargement.
  2. User1 puis envoyer image2 -> semble toujours ok, je peux voir la progression du téléchargement des deux images
  3. le téléchargement de l'image1 est terminé -> l'user2 obtient une image corrompue qui ressemble à une combinaison de image1 et image2 set!
  4. le téléchargement de l'image2 est terminé -> l'user2 obtient l'image2 avec succès

C'est comme ça que j'envoie une image

 - (void)sendImageMsgWithPath:(NSSsortingng *)path image:(UIImage *)image success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure progress:(void (^)(NSInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress { NSData *imageData = UIImageJPEGRepresentation(image, 0.5); // create the request NSURLRequest *request = [[AppClient sharedClient] multipartFormRequestWithMethod:@"POST" path:path parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:imageData name:@"image_name" fileName:@"image_name.jpg" mimeType:@"image/jpeg"]; }]; // create the operation AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease]; // set progress block [operation setUploadProgressBlock:progress]; //set completion blocks [operation setCompletionBlockWithSuccess:success failure:failure]; // set it to work in background [operation setShouldExecuteAsBackgroundTaskWithExpirationHandler:nil]; // add it to the operations queue [[AppClient sharedClient] enqueueHTTPRequestOperation:operation]; } 

*** le path pour les deux téléchargements d'images est le même:

path = @ "FrontEnd? cmd = sendimage & fromuserid = 3 & touserid = 1 &"

il sera ajouté à la baseURL pour créer l'URL Coplete:

@ " http://somename.myftp.org:8080/web_proj/FrontEnd?cmd=sendimage&fromuserid=3&touserid=1 "

Ce sont les images que j'ai envoyées:
image1
entrez la description de l'image ici

image2
entrez la description de l'image ici

image corrompue
entrez la description de l'image ici

Utilisez une requête multipartFormRequest pour cette utilisation ci-dessous:

 - (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSSsortingng *)method path:(NSSsortingng *)path parameters:(NSDictionary *)parameters constructingBodyWithBlock:(void (^)(id <AFMultipartFormDataProxy>formData))block; 

Par exemple comme ceci:

  NSURLRequest* request = [[YourHTTPClient sharedHTTPClient] multipartFormRequestWithMethod:@"POST" path:path parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:data1 name:@"image1" fileName:@"image1.jpg" mimeType:@"image/jpeg"]; [formData appendPartWithFileData:data2 name:@"image2" fileName:@"image2.jpg" mimeType:@"image/jpeg"]; } }]; 

Comment créez-vous les objects UIImage qui sont passés dans votre méthode sendImageMsgWithPath:? Les créez-vous en utilisant imageWithData: (ou similaire)? Si c'est le cas, j'ai vu des problèmes de ce genre en essayant de réutiliser un NSMutableData. Il semble que même après avoir créé UIImage, le sous-système doit toujours lire ces données ultérieurement. Et si vous avez depuis réutilisé ce NSMutableData, l'image sera corrompue.

Si c'est le cas, je vous recommand d'utiliser un nouveau NSMutableData pour créer chaque UIImage.