我正在开发一个消息应用程序,用户也可以互相发送图片。
当用户发送多张图片时,我将它们并行发送(我不会等待第一张完成上传,然后再发送第二张)
在迁移到之前,AFNetworking
我成功地使用了ASIFormDataRequest
,实际上如果我发送了 2 张图像,它们都被并行传输并成功传送给了另一个用户。
当我尝试使用 AFNetworking 执行此操作时,我得到了一些奇怪的行为。
我将尝试描述 user1 也发送两个图像 user2 的情况:
- User1 发送 image1 -> 一切正常,我可以看到上传进度。
- User1 然后发送 image2 -> 看起来还可以,我可以看到两个图像的上传进度
- image1 上传完成 -> user2 得到一个损坏的图像,看起来像是 image1 和 image2 的组合!
- 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 = @"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
损坏的图像