php接收ios上传图片的写法

一直上传不成功,搜了N遍,尝试了N遍,终于找到了一个相关的,如下:

你可以看一下你传到后台后的数据,看看是不是收到的数据跟你上传的数据不一样。base64编码之后,data里面会含有一些“+”,而“+”通过post传到后台后,会被转换成空格。这样后台就接收不到图片了。你可以让后台将收到数据的空格替换成“+”,或者你看看我写的一个解决方法的

  1. NSMutableDictionary *dic = [NSMutableDictionary dictionary];  
  2.    [dic setValue:self.foodNameField.text forKey:@"foodName"];  
  3.    [dic setValue:[GlobalClass shared].user.userid forKey:@"foodUser"];  
  4.    [dic setValue:self.foodAddressTextview.text forKey:@"foodAddr"];  
  5.    [dic setValue:self.foodPriceField.text forKey:@"foodPrice"];  
  6.    [dic setValue:self.recommendedReasonsTextview.text forKey:@"foodRecommend"];  
  7.      
  8.    <span style="color:#ff0000;">NSData *data = [NSData dataWithContentsOfFile:self.foodImagePath];  
  9.    NSString *baseStr = [data base64Encoding];  
  10.    NSString *baseString = (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,  
  11.                                                                                         (CFStringRef)baseStr,  
  12.                                                                                         NULL,  
  13.                                                                                         CFSTR(":/?#[]@!$&’()*+,;="),  
  14.                                                                                         kCFStringEncodingUTF8);  
  15.      
  16.    [dic setValue:baseString forKey:@"foodPicBig"];</span>  
  17.      
  18.    NSString *jsonStr = [GlobalClass DataTOjsonString:dic];  
  19.      
  20.    NSMutableDictionary *mudic = [NSMutableDictionary dictionaryWithObjectsAndKeys:jsonStr,@"data", nil nil];  
  21.    NSLog(@"参数:%@\n%@",jsonStr,mudic);  
  22.      
  23.    //图片  
  24.    NSDictionary *imageDic;  
  25.    if (self.foodImagePath) {  
  26.        imageDic = [NSDictionary dictionaryWithObjectsAndKeys:self.foodImagePath,@"foodPicBig", nil nil];  
  27.    }  
  28.      
  29.    [MBProgressHUD showHUDAddedTo:self.mainScrollview animated:YES];  
  30.      
  31.    NetRequest *request = [NetRequest requestWithTarget:self SuccessedMethod:@selector(recommendFoodSuccess:) FailedMethod:@selector(failed:)];  
  32.    [request postWithPath:RecommendFoodUrl params:mudic ImgData:nil ssl:NO];  
在一次项目中,要post图片到服务器上去,在之前要将图片转换成base64的格式。但是发现post上去的图片在服务器端总是不存在,经过与后台数据的对比发现image转成base64String里的“+”,post到服务器上都变成了空格。郁闷的很呀!开始没仔细去想,就直接叫后台将我post的string中的空格全部替换成“+”,这倒也算是解决了这个问题。但是总觉得这不是解决问题的最佳途径。后台经过查看一些资料,终于发现这个情况在post时,如果url中含有特殊字符(如“+=等”)就会出现的。但是在post之前对这些特殊符号做一次UTF8就可以了解决这个问题了。下面贴代码:

  1.  NSString *baseStr = [imgData base64Encoding];  
  2.  NSString *baseString = (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,   
  3.                                                        (CFStringRef)baseStr,   
  4.                                                        NULL,   
  5.                                                CFSTR(":/?#[]@!$&’()*+,;="),   
  6.                                                kCFStringEncodingUTF8);  
  7. [urlRequest setHTTPBody:[baseString dataUsingEncoding:NSUTF8StringEncoding]];  

展开阅读全文

没有更多推荐了,返回首页