php接收ios上传图片的写法
2016-07-30 20:12
441 查看
一直上传不成功,搜了N遍,尝试了N遍,终于找到了一个相关的,如下:
你可以看一下你传到后台后的数据,看看是不是收到的数据跟你上传的数据不一样。base64编码之后,data里面会含有一些“+”,而“+”通过post传到后台后,会被转换成空格。这样后台就接收不到图片了。你可以让后台将收到数据的空格替换成“+”,或者你看看我写的一个解决方法的
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:self.foodNameField.text forKey:@"foodName"];
[dic setValue:[GlobalClass shared].user.userid forKey:@"foodUser"];
[dic setValue:
4000
self.foodAddressTextview.text forKey:@"foodAddr"];
[dic setValue:self.foodPriceField.text forKey:@"foodPrice"];
[dic setValue:self.recommendedReasonsTextview.text forKey:@"foodRecommend"];
<span style="color:#ff0000;">NSData *data = [NSData dataWithContentsOfFile:self.foodImagePath];
NSString *baseStr = [data base64Encoding];
NSString *baseString = (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)baseStr,
NULL,
CFSTR(":/?#[]@!$&’()*+,;="),
kCFStringEncodingUTF8);
[dic setValue:baseString forKey:@"foodPicBig"];</span>
NSString *jsonStr = [GlobalClass DataTOjsonString:dic];
NSMutableDictionary *mudic = [NSMutableDictionary dictionaryWithObjectsAndKeys:jsonStr,@"data", nil nil];
NSLog(@"参数:%@\n%@",jsonStr,mudic);
//图片
NSDictionary *imageDic;
if (self.foodImagePath) {
imageDic = [NSDictionary dictionaryWithObjectsAndKeys:self.foodImagePath,@"foodPicBig", nil nil];
}
[MBProgressHUD showHUDAddedTo:self.mainScrollview animated:YES];
NetRequest *request = [NetRequest requestWithTarget:self SuccessedMethod:@selector(recommendFoodSuccess:) FailedMethod:@selector(failed:)];
[request postWithPath:RecommendFoodUrl params:mudic ImgData:nil ssl:NO];
在一次项目中,要post图片到服务器上去,在之前要将图片转换成base64的格式。但是发现post上去的图片在服务器端总是不存在,经过与后台数据的对比发现image转成base64String里的“+”,post到服务器上都变成了空格。郁闷的很呀!开始没仔细去想,就直接叫后台将我post的string中的空格全部替换成“+”,这倒也算是解决了这个问题。但是总觉得这不是解决问题的最佳途径。后台经过查看一些资料,终于发现这个情况在post时,如果url中含有特殊字符(如“+=等”)就会出现的。但是在post之前对这些特殊符号做一次UTF8就可以了解决这个问题了。下面贴代码:
NSString *baseStr = [imgData base64Encoding];
NSString *baseString = (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)baseStr,
NULL,
CFSTR(":/?#[]@!$&’()*+,;="),
kCFStringEncodingUTF8);
[urlRequest setHTTPBody:[baseString dataUsingEncoding:NSUTF8StringEncoding]];
你可以看一下你传到后台后的数据,看看是不是收到的数据跟你上传的数据不一样。base64编码之后,data里面会含有一些“+”,而“+”通过post传到后台后,会被转换成空格。这样后台就接收不到图片了。你可以让后台将收到数据的空格替换成“+”,或者你看看我写的一个解决方法的
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:self.foodNameField.text forKey:@"foodName"];
[dic setValue:[GlobalClass shared].user.userid forKey:@"foodUser"];
[dic setValue:
4000
self.foodAddressTextview.text forKey:@"foodAddr"];
[dic setValue:self.foodPriceField.text forKey:@"foodPrice"];
[dic setValue:self.recommendedReasonsTextview.text forKey:@"foodRecommend"];
<span style="color:#ff0000;">NSData *data = [NSData dataWithContentsOfFile:self.foodImagePath];
NSString *baseStr = [data base64Encoding];
NSString *baseString = (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)baseStr,
NULL,
CFSTR(":/?#[]@!$&’()*+,;="),
kCFStringEncodingUTF8);
[dic setValue:baseString forKey:@"foodPicBig"];</span>
NSString *jsonStr = [GlobalClass DataTOjsonString:dic];
NSMutableDictionary *mudic = [NSMutableDictionary dictionaryWithObjectsAndKeys:jsonStr,@"data", nil nil];
NSLog(@"参数:%@\n%@",jsonStr,mudic);
//图片
NSDictionary *imageDic;
if (self.foodImagePath) {
imageDic = [NSDictionary dictionaryWithObjectsAndKeys:self.foodImagePath,@"foodPicBig", nil nil];
}
[MBProgressHUD showHUDAddedTo:self.mainScrollview animated:YES];
NetRequest *request = [NetRequest requestWithTarget:self SuccessedMethod:@selector(recommendFoodSuccess:) FailedMethod:@selector(failed:)];
[request postWithPath:RecommendFoodUrl params:mudic ImgData:nil ssl:NO];
在一次项目中,要post图片到服务器上去,在之前要将图片转换成base64的格式。但是发现post上去的图片在服务器端总是不存在,经过与后台数据的对比发现image转成base64String里的“+”,post到服务器上都变成了空格。郁闷的很呀!开始没仔细去想,就直接叫后台将我post的string中的空格全部替换成“+”,这倒也算是解决了这个问题。但是总觉得这不是解决问题的最佳途径。后台经过查看一些资料,终于发现这个情况在post时,如果url中含有特殊字符(如“+=等”)就会出现的。但是在post之前对这些特殊符号做一次UTF8就可以了解决这个问题了。下面贴代码:
NSString *baseStr = [imgData base64Encoding];
NSString *baseString = (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)baseStr,
NULL,
CFSTR(":/?#[]@!$&’()*+,;="),
kCFStringEncodingUTF8);
[urlRequest setHTTPBody:[baseString dataUsingEncoding:NSUTF8StringEncoding]];
相关文章推荐
- iOSAFN上传图片 php接收(一)(模拟表单上传)
- PHP接收Android和ios上传的图片,支持多图片
- PHP post 接口上传图片 [接收ios ||androip 两种接收图片数据流保存图片方式]
- PHP POST接收处理 IOS上传NSData图片数据,上传图片到服务器
- php接收ios/android上传图片
- Android端使用retrofit上传多张图片,后端使用Php接收图片
- Android -线程池 批量上传图片 -附php接收代码
- PHP图片上传接口 Android/iOS
- java接收IOS上传的图片文件multipart/form-data类型
- PHP Curl post上传图片版本不兼容而引起服务器端接收不到图片问题。
- ios ASIFormDataRequest上传图片到php服务器
- iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样
- 控制器接收图片和上传图片写法
- 使用php://input接收手机图片上传二进制流
- ios ASIFormDataRequest上传图片到php服务器
- Android 上传图片并添加参数 PHP接收
- 安卓端上传图片到服务器php接收
- php 实现接收客户端上传的图片
- php接口 接受ios或android端图片; php接收NSData数据
- php 实现接收客户端上传的图片