如何将包含图像的JSON对象发布到服务器?

时间:2014-02-05 04:56:26

标签: ios objective-c json

以下是我用于以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不支持图片上传吗?我是否需要找到另一种将图像上传到服务器的方法?谢谢你的帮助。

2 个答案:

答案 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);