以下是我用于以JSON格式向服务器发布信息的代码。
NSData *jsonData = [dict dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *jsonLength = [NSString stringWithFormat:@"%d",[jsonData length]];
//Initiating the request
urlRequest = [[NSMutableURLRequest alloc] init];
[urlRequest setURL:url];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:jsonLength forHTTPHeaderField:@"Content-Length"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
//[urlRequest setValue:@"applcation/x-www-form-urlencoded;" forHTTPHeaderField:@"Content-Type"];
[urlRequest setValue:@"applcation/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPBody:jsonData];
以下是数据部分。
NSString *urlStg = nil;
NSString *dict = [NSString stringWithFormat:@"{\"keyword\":\"%@\",\"email\":\"%@\",\"password\":\"%@\"}",@"login",@"xx@aaa.com",@"2221"];
//Parsing JSON data
_LZjsonfetcher = [[JSONFetcher alloc] init];
[_LZjsonfetcher setDelegate:self];
[_LZjsonfetcher postDataParsed:dict url:urlStg delegate:nil key:nil];
我已经成功连接到服务器并获得JSON返回。 但是,问题是我对如何使用JSON向服务器提交图像一无所知。我试图找到一个没有成功的样本。 JSON不支持图片上传吗?我是否需要找到另一种将图像上传到服务器的方法?谢谢你的帮助。
答案 0 :(得分:2)
虽然你可以使用这里的建议来做到这一点,但我认为值得看看AFNetworking
框架,这使我认为整个网络过程更容易。
使用此框架,您可以通过以下方式发送带有图像的JSON:
AFHTTPRequestOperationManager * manager = [[AFHTTPRequestOperationManager alloc] init];
NSData * imageData = UIImageJPEGRepresentation(myImage, 1.0);
NSDictionary * jsonParameters = @{@"key":@"value"};
[manager POST:@"http://myURL.com" parameters:jsonParameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"attachment" fileName:@"myImage.jpg" mimeType:@"image/jpeg"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success!");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure!");
}];
该框架非常灵活,你可以用它做更多的事情 - 我强烈推荐它。
答案 1 :(得分:1)
使用base64编码,它将数据转换为与json兼容的字符串。
UIImage* image = nil;
NSData* dataImage = UIImagePNGRepresentation(image);
NSString* base64Image = [dataImage base64EncodedStringWithOptions:0];
[dictionary setObject:base64Image forKey:@"image"];
现在在服务器端,你需要解码base64字符串并将其保存为图像文件,php:
$dictionary = NULL;
$base64_image = $dictionary->image;
$image = base64_decode($base64_image);
file_put_contents('/image.png', $image);