使用AFNetworking在JSON负载中嵌入Base64的正确方式是什么?

4
感谢您的帮助。我正在处理一个只接受JSON有效负载的Web服务,并且该服务已设置用于提交照片。
因此,我正在尝试找出在JSON有效负载中嵌入图像的正确方法。这是我的处理方式。
//convert image to nsdata
NSData *originalPhoto = UIImageJPEGRepresentation(self.photo.image,.9);
//convert the data to a base64 string using NSData+Base64 category extension (Matt Gallagher version)

NSString *base64photoString = [originalPhoto base64EncodedString];

//set the string in a NSDictionary
[info setValue:base64photoString forKey:@"data"];

//then pass it to AFNetworking using the httpClient

一切似乎正常工作,我得到了json负载。注意:base64字符串出现在post主体中。

请问有没有人知道如何使用此方法嵌入URI到数据前面 - 类似于这样:"file":“data:image/jpg;base64,[base64字符串]”- 我试过了,但网络服务没有任何响应,可能是我语法错误。

不过网络服务并不喜欢它。

为了验证编码,我已经从nslog中剪切出生成的字符串,并将其粘贴到在线解码器网站上,它重新创建了原始图像 - 所以看起来数据已经正确编码。

在我与Web服务器管理员交谈之前还要等几天时间,所以我只是想确认这是否是正确的方法或指出任何缺陷。我无法将服务更改为多部分编码表单,所以我被困在这个方法中。

再次感谢


你确定应该将图像本身放入JSON吗?我知道的任何一个合理工作的WS都仅将其用于元数据,实际数据在POST主体中。 - user529758
谢谢您的回复。它确实作为JSON字段之一放在正文中。我已经更新了我的问题,并提出了关于URI的其他问题。 - CocoaEv
1个回答

4
我已经处理好了并且想分享答案,以便其他人遇到类似问题时可以受益。
情境 - 发送一个包含照片base64编码的JSON数据。
我在此处发现了一个forked版本的base64 https://github.com/l4u/NSData-Base64.git。该版本中有一个额外的方法是根据Matt Gallagher 2009年发布的原始工作创建的:base64EncodedStringWithSeparateLines:YES -- 它解决了这个问题。
//use it like this:
NSData *originalPhoto = UIImageJPEGRepresentation(self.photo.image,1);
NSString *base64PhotoString = [originalPhoto base64EncodedStringWithSeparateLines:YES]; 

//stuff it in a dictionary like this:
NSMutableDictionary *info = [NSMutableDictionary dictionary];
[info setValue:base64PhotoString forKey:@"sFileData"];

//send it using AFNetworking like this:
[[ClientInterface sharedInstance] postPath:submitPhoto parameters:info success:^(AFHTTPRequestOperation *operation, id responseObject) {

   NSLog(@"success!");

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog(@"Error:%@",error);

}];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接