使用AFNetworking发送多个图像

Eya*_*yal 6 iphone multipartform-data objective-c ios afnetworking

我正在开发一个消息传递应用程序,用户也可以相互发送图片.
当用户发送多张图片时,我会并行发送它们(我发送第二张图片之前,我不等待第一张图片完成上传)

在移动到AFNetworkingI 之前,我成功完成了这项工作ASIFormDataRequest,实际上,如果我发送了2张图像,它们都会并行传输并成功传送给其他用户.

当我尝试使用AFNetworking进行此操作时,我会遇到一些奇怪的行为.
我将尝试描述user1发送两个图像的情况user2:

  1. User1发送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];
}
Run Code Online (Sandbox Code Playgroud)

***两个图片上传的路径是相同的:

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

它将被添加到baseURL以创建完整的URL:

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

这是我发送的图像:
image1
在此输入图像描述

图像2
在此输入图像描述

图像损坏
在此输入图像描述

Par*_*iya 1

使用 multipartFormRequest 来使用以下方法:

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

例如这样:

 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"];
                     }
                 }];
Run Code Online (Sandbox Code Playgroud)