UIImagePickerController와 함께 UIImage 테이크를 다른 관련 값과 함께 서버 POST에 보내려고합니다. 이미지가 유효한 JSON 값이 아니기 때문에,UIImagePickerController에서 UIImage POST를 서버로 보내시겠습니까?
-(void)sendImageToServer:(UIImage *)image
{
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.maxConcurrentOperationCount = 4;
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration] delegate:nil delegateQueue:queue];
NSURL *uploadURL = [NSURL URLWithString:@"http://...."];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:uploadURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30.0];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:@"POST"];
NSData *postData = [[NSData alloc] init];
[postData setValue:UIImageJPEGRepresentation(image, 1.0) forKey:@"image"];
[postData setValue:@"1" forKey:@"categories[0]"];
[postData setValue:@"4" forKey:@"categories[1]"];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
fromData:postData
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
if (httpResponse.statusCode == 200) {
dispatch_async(dispatch_get_main_queue(), ^{
NSError *err;
NSDictionary *JSONDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&err];
NSLog(@"HTTP 200 response: %@", JSONDict);
});
} else {
NSLog(@"HTTP %ld status!", (long)httpResponse.statusCode);
}
} else {
NSLog(@"HTTP post image error: %@", error);
}
}];
[uploadTask resume];
}
JSON 직렬화가 여기에 작동하지 않습니다하지만 UIImageJPEGRepresentation (이미지, 1.0)에 사전 값 @ "이미지"를 설정하려고 줄을 얻을. 다른 한편으로는 나는 시도한다 :
...
NSMutableData *postData = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:postData];
[archiver encodeObject:UIImageJPEGRepresentation(image, 1.0) forKey:@"image"];
[archiver encodeObject:@"1" forKey:@"categories[0]"];
[archiver encodeObject:@"4" forKey:@"categories[1]"];
[archiver finishEncoding];
//NSData *postData = [NSJSONSerialization dataWithJSONObject:dataDict options:NSJSONWritingPrettyPrinted error:&jsonError];
//Now you can post the json data
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
fromData:postData
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {...
보관 된 키 : 값 쌍은 서버에 그런 것처럼 보이지 않는다. 이것은 일상적으로 iOS 코딩 작업이어야합니다. 서버는 전혀 키를하지 않습니다
NSError *jsonError;
NSData *postData = [NSJSONSerialization dataWithJSONObject:@{@"image":@"123",@"categories[0]":@"1",@"categories[1]":@"4"} options:NSJSONWritingPrettyPrinted error:&jsonError];
... NSData
의 적절한 사용이 아니다
NSData * imageData = UIImageJPEGRepresentation (image, 1.0); –
당신은 더 나은 ASIHTTPREQUEST 또는 AFNETWORKING 라이브러리를 사용해보십시오. –