使用AFNetworking发送多个图像

我正在开发一个消息应用程序,用户也可以将图片发送到另一个。
当用户发送多个图片时,我并行发送(在发送第二个图片之前,我不等第一个图片完成上传)

在转移到AFNetworking之前,我成功地通过ASIFormDataRequest这个ASIFormDataRequest ,而且事实上,如果我发送了2个图像,它们都被并行传输并成功传送给另一个用户。

当我尝试用AFNetworking来做这件事时,我得到了一些奇怪的行为。
我将尝试描述user1发送两个图像的情况user2:

  1. 用户1发送image1 – >一切看起来不错,我可以看到上传进度。
  2. User1然后发送image2 – >仍然看起来好,我可以看到两个图像的上传进度
  3. image1上传完成 – > user2得到一个损坏的图像,看起来像一起image1和image2的组合!
  4. image2上传完成 – > user2成功获取image2

这是我如何发送图像

 - (void)sendImageMsgWithPath:(NSString *)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]; } 

***图片上传的path是相同的:

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

它会被添加到baseURL来创buildcopleteurl:

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

这是我发送的图片:
此search
在这里输入图像说明

图像2
在这里输入图像说明

损坏的图像
在这里输入图像说明

使用下面的方法使用multipartFormRequest:

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

比如像这样:

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

你如何创build传递到你的sendImageMsgWithPath:方法的UIImage对象? 你使用imageWithData创build它们:(或类似的)? 如果是这样,当试图重用一个NSMutableData时,我看到了这样的问题。 看来,即使在创buildUIImage之后,子系统仍然需要稍后读取这些数据。 如果你有重用NSMutableData,图像将被损坏。

如果是这种情况,我build议你使用一个新的NSMutableData来创build每个UIImage。