메시징 앱을 개발 중이며 사용자는 사진을 서로 보낼 수도 있습니다. 사용자가 AFNetworking
로 이동하기 전에AFNetworking으로 둘 이상의 이미지 보내기
내가 병렬로 보내 이상의 사진 (나는 두 번째를 보내기 전에 내가 업로드를 완료하는 최초의 하나 기다리지 않는다) 보낼 때
나는 ASIFormDataRequest
으로이 일에 성공 , 실제로 2 장의 이미지를 보내면 두 이미지가 동시에 전송되어 다른 사용자에게 성공적으로 전달됩니다.
AFNetworking으로이 작업을 시도 할 때 이상한 동작이 발생합니다.
나는 USER1도 사용자 2 개의 이미지를 전송 한 경우를 설명하려고합니다 : 사용자 1 image1에를 보내
- - 모든 것이 좋아 보인다>, 내가 업로드 진행 상황을 볼 수 있습니다.
- User1 다음으로 image2 보내기 -> 여전히 괜찮아 보입니다. 두 이미지 업로드 진행 상태를 볼 수 있습니다.
- image1 업로드가 완료되었습니다. -> user2가 image1과 image2의 조합처럼 보이는 손상된 이미지를 가져옵니다!
- 이미지 2 업로드가 완료 - 사용자 2는
성공적으로 이미지 2를 얻을 수> 이것은 내가 이미지를 전송하는 방법입니다
- (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];
}
는 *** 두 이미지 업로드 경로가 동일합니다
는 coplete의 URL 생성하기 위해 base을 추가됩니다path = @ "FrontEnd? cmd = sendimage & fromuserid = 3 & touserid = 1 &"
:
image1에
이 내가 보낸 이미지입니다 @
을
image2
손상된 이미지
보내는 이미지마다 별도의 버퍼를 사용하고 있는지 확인하십시오. 또한 수신자가 수신 된 각 이미지에 대해 별도의 버퍼를 사용하는지 확인하십시오. 마치 어딘가에 결합 된 것처럼 들립니다. 마지막으로, 3G/4G를 통해 송수신하는 경우 모든 이미지를 병렬로 전송하여 많은 처리량 향상을 얻지 못할 수도 있습니다. 얼마나 많은 스트림이 최적인지보기 위해 실험을해야 할 것입니다. – nielsbot
ASIHTTPRequest 라이브러리를 사용하여이 작업을 성공적으로 마쳤으므로 아마도 서버 문제는 아닙니다. 클라이언트 측의 버퍼에 대해서는 잘 처리하지 못합니다. AFNetworking API를 사용하고 있습니다. 라이브러리가이를 관리하는지, 아니면해야 할 지 확실하지 않습니다. – Eyal
어떻게 처리할까요? 서버 측? 어쩌면받은 이미지를 같은 파일에 씁니다. 첫 번째 이미지는 두 번째 이미지로 덮어 쓰기 시작하고, 두 번째 이미지는 첫 번째 이미지를 완전히 덮어 썼기 때문에 확인 메시지가 전송됩니다. – yonosoytu