采用AFNetWorking 上传base64的图片到服务器,上传的图片解析不了。ASIHttpRequest上传是可以的,请教!

LmyangBK 2015-03-18 10:35:27
采用AFNetWorking 上传base64的图片到服务器,上传的图片解析不了。ASIHttpRequest上传是可以的,两种写法如下,求教,能给个思路吗?

IOS AFNetworking upload pictures to the server.The request is successful,But it can not parse base64 image.Then same request using ASIHTTPReuqest framework upload base64 images on the server side can parse is successful.Can you give a suggestion or idea?

AFNworking request Code:

UIImage *img = [avatar imageWithImageSimple:avatar scaledToSize:EZSIZE(320, 320)];

NSData* imageData = UIImageJPEGRepresentation(img, 0.5);

NSString *strBase64 = [imageData base64String];

NSDictionary * object = @{
@"firstname" :@"nameTest",
@"sex" :@"male",
@"user_id" :@"1234556",
@"avatar" :strBase64,
@"phone" :@"15899402939"
};
NSMutableDictionary *parameter = [[NSMutableDictionary alloc] init];

[parameter setObject:@1 forKey:@"app"];

[parameter setObject:@"save_settings" forKey:@"m_action"];

[parameter setObject:[[object JSONRepresentation] forKey:@"m_param"]];

NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST"
URLString:@"http://test..."
parameters:parameter
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
} error:nil];



AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

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

}];

ASIHttpRequest request code:

UIImage *img = [avatar imageWithImageSimple:avatar scaledToSize:EZSIZE(320, 320)];
NSData* imageData = UIImageJPEGRepresentation(img, 0.5);
NSString *strBase64 = [imageData base64String];

NSDictionary * object = @{
@"firstname" :@"nameTest",
@"sex" :@"male",
@"user_id" :@"1234556",
@"avatar" :strBase64,
@"phone" :@"15899402939"
};

NSString *parameter = @"app=1";

parameter = [[parameter stringByAppendingString:@"&m_action="] stringByAppendingString:@"save_settings"];

parameter = [[parameter stringByAppendingString:@"&m_param="] stringByAppendingString:[object JSONRepresentation]];

NSData *data = [parameter dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

[request setDidFailSelector:@selector(handleRequestEventError:)];
[request setDidFinishSelector:@selector(parseAndSave:)];

[request addRequestHeader:@"Content-Length" value:[@([data length]) stringValue]];
[request setRequestMethod:@"POST"];
[request appendPostData:data];
[request addRequestHeader:@"Content-Type" value:@"application/x-www-form-urlencoded"];

[request setDelegate:self];


[_networkQueue addOperation:request];
...全文
6476 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kongrenxin 2017-11-23
  • 打赏
  • 举报
回复
兄台,这个问题解决了吗? 怎么解决的呢,我现在也碰到这个问题了。。。 需要post的body数据为 : {"type":1,"content":"abc/ada"} 结果服务器接收到的却是:{"type":1,"content":"abc\/ada"} 多出来一个转义符 \ 怎么样才能让AFN不修改body数据呢??
JarvanSun 2016-07-29
  • 打赏
  • 举报
回复
base64编码后的字符串中含有 / ,在转JSON 的时候,iOS在/ 前添加了反斜线 \ 去AFN里的AFURLRequestSerialization 里的 - (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request withParameters:(id)parameters error:(NSError *__autoreleasing *)error; 这个函数里跟一下看看是不是这个原因
wwwang89123 2015-07-06
  • 打赏
  • 举报
回复
Juejue 2015-04-29
  • 打赏
  • 举报
回复
楼主,你的问题解决了吗?我也是把图片转换为nsdata再用base64编码上传,但是服务器无法解析。而且我再上传前还做了不转义NSString *encodedString = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); 好纠结啊。
Bannings 2015-03-19
  • 打赏
  • 举报
回复
引用 7 楼 LmyangBK 的回复:
- (void)testDicty { NSDictionary *dic = @{@"name1" :@"3432", @"name1" :@"3432", @"name1" :@"3432" }; NSDictionary *dicy = @{@"name" :@"zhangsan", @"age" :@"12", @"param" : [dic JSONRepresentation] }; NSLog(@"dicy = %@",dicy); } 打印输出: 2015-03-19 10:39:51.265 SD4iPad[1926:54805] dicy = { age = 12; name = zhangsan; param = "{\"name1\":\"3432\"}"; } 是不是因为当一个字典里包含有一个[dic JSONRepresentation]对象,然后dic里的Json数据就会有转义字符? 是不是这个照成的?求解。
这样有影响,如果json里套json的话,服务器拿到param后,实际上拿到的是一个字符串,需要再次把这个字符串解析为json
LmyangBK 2015-03-19
  • 打赏
  • 举报
回复
- (void)testDicty { NSDictionary *dic = @{@"name1" :@"3432", @"name1" :@"3432", @"name1" :@"3432" }; NSDictionary *dicy = @{@"name" :@"zhangsan", @"age" :@"12", @"param" : [dic JSONRepresentation] }; NSLog(@"dicy = %@",dicy); } 打印输出: 2015-03-19 10:39:51.265 SD4iPad[1926:54805] dicy = { age = 12; name = zhangsan; param = "{\"name1\":\"3432\"}"; } 是不是因为当一个字典里包含有一个[dic JSONRepresentation]对象,然后dic里的Json数据就会有转义字符? 是不是这个照成的?求解。
LmyangBK 2015-03-19
  • 打赏
  • 举报
回复
ASI 请求参数: app=x&m_action=save_settings1&m_param={"firstname":"xxx","sex":1,"user_id":311xxx,"phone”:”xxxxx”,”avatar":"/9j/4AAQSkZJRgABAQEASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABQKADAAQAAAABAAABQAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAxDW0HYxmixn0ozSA04VZAzmmOwAqQ1C+...........................MUmwSP/9XjUuGkiMU0YUw+Wdx5HPXFNn1eeLUJYnwyyxhI+uMHgn86zdWuR8k8c/XiukutQg1NftF5DkEkEjt+WK89hHmN5YOMdP512dm5ljaGJCw4JHp2zXNiYxjqkTdJaoSwWy0vVLdpBvX5mX8cgCvQYIIuM00mjr9pCSbTPGr7S57O4/dr8j8r/AIVRVpLd8ocMOte4Dwl4nRI5UsJs8ZGBwc896pa78ONbuI/7RtLGUSYO9OOeOMVtTxErqM4nHUox1lBn/9k="} ============================================================================================== AFN base64: { app = X; "m_action" = "save_settings1”; "m_param" = "{\"firstname\":\"xxxx\",\"sex\":1,\"user_id\”:12323,\”phone\”:\”32132132\”,\”avatar\":\"/9j/4AAQSkZJRgABAQEASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABQKADAAQAAAABAAABQAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBQAFAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAA..................HkHOQPxzWjBctdTSWkvyscAZ7HsPxp0ubeeISR7JMbWx6g4/Ksa4Yxao5kyu7j8ccH864WuY7b2L2qQP8jIO+dv90jrWUY/OYzAnhskemOtdtNH9vsxIcfaEQEj+961zU/2eKdQ26Itg5HT8amjVurdUKUNbmVeKu8iMbQ4yMdOtIMRqLaVv3fVW/uk9a0bi3Yx+ao3BWG1vw6VlMCpkEg4ZcZ/WumEk0ZTjZlIgxMCw96dPIJZC68A4p8qySDceigY+lQcFcH1rUyYkiEKG9RTVPOKlLE4RugqNhn8A+MiQiaXPtUYHA/wAaB4E8aF0zpU4xx0H+NauimT7ZoL3UIZNQ+08lpFy5PUE81tafZx3trK1i+ZOsgbtngEfnVS68AeMTOzJp85XjsPSiLwj49tZAU06cp0IAHT86zlQutDRV7PUbOm+YMz/dyPr2Bpr25DtAQSHBPPqBXSQeG/FrvE0+kzEAYbIGensa2Lvwh4he2CwafMHX51JA4x261xuM00mjr9pCSbTPGr7S57O4/dr8j8r/AIVRVpLd8ocMOte4Dwl4nRI5UsJs8ZGBwc896pa78ONbuI/7RtLGUSYO9OOeOMVtTxErqM4nHUox1lBn/9k=\"}"; 因为base64太长了,超出输入框字数了。两个请求上传的base64是一样的。区别是AFN开始和结尾的时候多了一个转义符“\”。
Bannings 2015-03-18
  • 打赏
  • 举报
回复
你居然把stackoverflow上的帖子直接copy过来 太不仗义了
Bannings 2015-03-18
  • 打赏
  • 举报
回复
你把AFNetworking和ASI对同一图片的base64分别发出来,我试试能不能解析
不担心 2015-03-18
  • 打赏
  • 举报
回复
如果base64解析不了的话你可以直接传图片上去让服务器端处理啊,我直接贴上我传图片的代码,base64的我也有用过,没什么问题啊 +(AFHTTPRequestOperation *)updateCover:(short)coverIndex imgCover:(UIImage *)imgCover aBlock:(resultBlock)aBlock; { NSDictionary *param=@{@"token":[publicTools getIdToken], @"id":[@([currUser shareInstance].userID) stringValue], @"action":@"updatestorycover", @"cover_index":[@(coverIndex) stringValue] }; return [[netEngine uploadEngine] POST:XXX parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:UIImageJPEGRepresentation(imgCover, .5) name:@"uploadimg" fileName:@"asdf.jpeg" mimeType:@"image/jpeg"]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { aBlock((NSDictionary *)responseObject, [[(NSDictionary *)responseObject valueForKey:@"success"] intValue], [(NSDictionary *)responseObject valueForKey:@"data"], [(NSDictionary *)responseObject valueForKey:@"message"] ); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { [self processError:error aBlock:aBlock]; }]; }
LmyangBK 2015-03-18
  • 打赏
  • 举报
回复
真没办法,找不到解决的问题。
LmyangBK 2015-03-18
  • 打赏
  • 举报
回复
stackoverflow 也是我发的。。github 中 AFNetwoking 提的问题中,我也发过。

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧