一直上传不成功,搜了N遍,尝试了N遍,终于找到了一个相关的,如下:
你可以看一下你传到后台后的数据,看看是不是收到的数据跟你上传的数据不一样。base64编码之后,data里面会含有一些“+”,而“+”通过post传到后台后,会被转换成空格。这样后台就接收不到图片了。你可以让后台将收到数据的空格替换成“+”,或者你看看我写的一个解决方法的
NSMutableDictionary*dic = [NSMutableDictionarydictionary];
[dicsetValue:self.foodNameField.textforKey:@"foodName"];
[dicsetValue:[GlobalClassshared].user.useridforKey:@"foodUser"];
[dicsetValue:self.foodAddressTextview.textforKey:@"foodAddr"];
[dicsetValue:self.foodPriceField.textforKey:@"foodPrice"];
[dicsetValue:self.recommendedReasonsTextview.textforKey:@"foodRecommend"];
NSData*data = [NSDatadataWithContentsOfFile:self.foodImagePath];
NSString*baseStr = [database64Encoding];
NSString*baseString = (__bridgeNSString*) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)baseStr,
NULL,
CFSTR(":/?#[]@!$&’()*+,;="),
kCFStringEncodingUTF8);
[dicsetValue:baseStringforKey:@"foodPicBig"];
NSString*jsonStr = [GlobalClassDataTOjsonString:dic];
NSMutableDictionary*mudic = [NSMutableDictionarydictionaryWithObjectsAndKeys:jsonStr,@"data",nilnil];
NSLog(@"参数:%@\n%@",jsonStr,mudic);
//图片
NSDictionary*imageDic;
if(self.foodImagePath) {
imageDic = [NSDictionarydictionaryWithObjectsAndKeys:self.foodImagePath,@"foodPicBig",nilnil];
}
[MBProgressHUDshowHUDAddedTo:self.mainScrollviewanimated:YES];
NetRequest*request = [NetRequestrequestWithTarget:selfSuccessedMethod:@selector(recommendFoodSuccess:)FailedMethod:@selector(failed:)];
[requestpostWithPath:RecommendFoodUrlparams:mudicImgData:nilssl:NO];在一次项目中,要post图片到服务器上去,在之前要将图片转换成base64的格式。但是发现post上去的图片在服务器端总是不存在,经过与后台数据的对比发现image转成base64String里的“+”,post到服务器上都变成了空格。郁闷的很呀!开始没仔细去想,就直接叫后台将我post的string中的空格全部替换成“+”,这倒也算是解决了这个问题。但是总觉得这不是解决问题的最佳途径。后台经过查看一些资料,终于发现这个情况在post时,如果url中含有特殊字符(如“+=等”)就会出现的。但是在post之前对这些特殊符号做一次UTF8就可以了解决这个问题了。下面贴代码:
NSString*baseStr = [imgDatabase64Encoding];
NSString*baseString = (__bridgeNSString*) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)baseStr,
NULL,
CFSTR(":/?#[]@!$&’()*+,;="),
kCFStringEncodingUTF8);
[urlRequestsetHTTPBody:[baseStringdataUsingEncoding:NSUTF8StringEncoding]];