php接收ios上传图片的写法

4 篇文章 0 订阅
一直上传不成功,搜了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]];  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 如果你在使用 uniapp 在 iOS图片时遇到了失败的情况,那么可能是因为以下几种原因造成的: 1. 你的网络环境不稳定,导致上失败。 2. 你的图片太大,超过了服务器能够处理的大小限制。 3. 服务器端出了问题,导致无法正常接收图片。 4. 你的 uniapp 客户端代码存在 bug,导致无法正常上图片。 如果你不确定是哪个原因造成的上失败,建议你尝试以下步骤来解决这个问题: 1. 确保你的网络环境良好。 2. 尝试将图片的大小压缩到合理的范围内再上。 3. 尝试在不同的时间上图片,如果总是在同一时间上失败,可能是服务器端出了问题。 4. 检查你的 uniapp 客户端代码,确保没有任何 bug 影响了图片的过程。 ### 回答2: uniapp 是一种基于Vue.js开发的跨平台应用开发框架,支持同时开发iOS和Android应用。对于uniapp在iOS上上图片失败的问题,可能有以下几个原因: 1. 权限问题:iOS系统对于相机和相册的访问需要获取用户的权限,如果应用未获取相应的权限,就无法上图片。可以在uniapp的manifest.json文件中设置相应的权限配置。 2. 图片路径问题:iOS系统中,相机拍摄的照片和从相册选取的照片存储在不同的位置,导致图片路径可能不一致。在uniapp中,可以使用uni.chooseImage方法选择照片,回调函数中可以获取到选择的图片的临时文件路径,可以根据具体的需要进行处理。 3. 图片大小限制:iOS系统对于图片大小有一定的限制,如果选择的图片大小超过了系统限制,上可能会失败。可以在uniapp中使用uni.compressImage方法对图片进行压缩,减小图片的大小。 4. 上服务器问题:上图片失败也有可能是服务器端的问题,可能是上接口的问题或者网络连接的问题。可以使用浏览器调试工具或者抓包工具查看具体的错误信息,以便排查问题。 针对以上可能的问题,可以逐一排查并解决。同时,要确保uniapp使用的是最新版本,以获得最新的修复和功能支持。如果以上方法都没有解决问题,可以参考uniapp官方文档或者查找相关的社区讨论,寻求帮助。 ### 回答3: uniapp 是一种跨平台开发框架,它可以将同一个代码基础同时编译成多个平台的应用程序。但是在 iOS 平台上,有时候会出现上图片失败的情况。 这种问题的出现可能有多种原因,我们可以尝试以下几个解决方法: 1. 检查网络连接:首先,我们需要确保 iOS 设备连接到了稳定的网络,如果网络不稳定或者信号弱,可能会导致上失败。可以尝试连接到其他网络或者重启网络设备来解决问题。 2. 检查文件格式:iOS 平台对文件格式有一些限制,如果上图片格式不被支持,可能会导致上失败。可以将图片转换成 iOS 支持的格式,例如 JPEG 或者 PNG 格式,然后尝试重新上。 3. 检查文件大小:iOS 平台对上文件的大小也有一定限制,如果上图片文件过大,可能会导致上失败。可以尝试缩小图片的尺寸或者压缩图片的质量,然后重新上。 4. 检查权限设置:iOS 平台对应用的文件访问权限有一些限制,如果没有正确设置权限,可能会导致上失败。可以在应用的设置中检查并修改文件访问权限,然后重新上。 如果以上方法都没有解决问题,可以尝试查看 iOS 设备的日志或者调试信息,看是否有相关的错误提示。另外,也可以尝试在其他 iOS 设备上运行同样的代码,以确定是否是设备特定的问题。如果问题仍然存在,可以提供更多的细节信息,以便我们能够更好地帮助解决该问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值