iOS连续上传多张图片
参考地址:http://www.cocoachina.com/ios/20180730/24366.html
需求是怎样的:for 循环里面、多个网络请求上传图片,每次上传一张,至于为什么每次只上传一张呢,因为上传一张将要返回图片存储服务器的地址,然后再把地址作为请求参数,请求自己服务器的 API。
过程可以说曲折,不过也有收获
解决方案一:
递归调用上传图片的函数、第一张请求成功后,然后第二张,依次进行。当然效率肯定不高,即使上传图片的AFN方法做了多线程处理。中间上传失败了,还继续上传吗?需求决定。所有放弃
解决方案二:
使用GCD 队列组:这里就直接贴代码了:
dispatch_group_t group = dispatch_group_create();for(..){dispatch_group_async(group,dispatch_get_global_queue(0, 0), ^{NSLog(@"队列组:有一个耗时操作完成!");});}dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"队列组:前面的耗时操作都完成了,回到主线程进行相关操作");});
我只能说想法很完美啊,网上也不只提出这种方案,但是我的实践过程是有问题了。网络请求延迟,队列组不可控。所以放弃
方案三:利用数组的有序性:
怎么个利用法?请看:
创建一个模型、两个属性第一个你要上传的数据信息如:image 或者 data ,根据你上传函数需要的参数来定。第二个属性:NSString URL 服务端返回的图片地址:
将你要上传的图片数组、封装成模型数组,数组是有序的这就是重点,for 循环 模型作为参数调用图片上传函数,请求成功后更新模型的值
判断所有的图片上传完毕,然后,就从模型数组里面去取 ,图片 url ,请求自己的服务器api
好了,应该很清楚吧。不清楚再上点干货:
model:
// 建立这个类的目的、主要是为了for循环多张图片上传、成功后回来的地址顺序问题
#import
@interface FMUploadModel : NSObject//根据自己的上传函数需要决定@property (nonatomic,strong) NSArray * dataArray;
@property (nonatomic,copy) NSString *imgUrl;
@end
function
//开辟一个多线程 执行图片上传工作
dispatch_queue_t queue = dispatch_queue_create("upimgs", DISPATCH_QUEUE_CONCURRENT);dispatch_async(queue, ^{// 耗时操作放在这里__weak typeof(self) weakself = self;__block int finishNum = 0;for (int i = 0 ; i < self.selectImgs.count; i++) {YRFormData *getData = [[YRFormData alloc] init];getData.data = UIImagePNGRepresentation(self.selectImgs[i]);getData.name = @"uzee_image";getData.filename = @"head.png";getData.mimeType = @"image/png";NSArray *array = @[getData];//***********//FMUploadModel *model = [FMUploadModel new];model.dataArray = array;model.imgUrl = @"";[models addObject:model];/*******其实是一张一张传的,传数组是调用这个方法**********/[YRHttpTool postWithURLNoAES:@"*****" params:@{} formDataArray:model.dataArray success:^(id json) {finishNum ++ ;model.imgUrl = json[@"response"][@"cloud"];if (finishNum == self.selectImgs.count) {dispatch_async(dispatch_get_main_queue(), ^{// 回到主线程进行UI操作[MBProgressHUD hideHUDForView:weakself.view];updateImage();});}} failure:^(NSError *error) {dispatch_async(dispatch_get_main_queue(), ^{// 回到主线程进行UI操作[MBProgressHUD hideHUDForView:weakself.view];[MBProgressHUD showError:@"图片上传失败,请稍后再试" toView:self.view];});} progress:^(NSProgress *progress) {[[NSOperationQueue mainQueue] addOperationWithBlock:^{float value = 1.0 *progress.completedUnitCount / progress.totalUnitCount;[MBProgressHUD showDownload:@"发布中..." toView:weakself.view progress:value];}];}];}});
转载于:https://www.cnblogs.com/hualuoshuijia/p/9448546.html
iOS连续上传多张图片相关推荐
- Java IOS客户端上传多张图片到服务端
Java IOS客户端上传多张图片到服务端 业务场景:用户相册需要上传多张图片到服务器,上限为12张.本文主要介绍Java服务端的文件和流的处理. 下图为iOS端和服务端最终结果一览. iOS端 : ...
- iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样
// 上传多张图片 - (void)send {// 设置初始记录量为0self.count = 0;self.upcount = 0;// 设置初始值为NOself.isUploadPictures ...
- php上传多张图片为什么只显示一张,javascript,_js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次???,javascript - phpStudy...
js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? self.$els.upload ...
- 微信小程序-上传多张图片加进度,持续修正中……
tips.参考网上资料的改进版 1.怎么使用.html <!--无限制需要在js代码里设置数量,upload为上传地址,或者说图片服务器--><up-picurl="{{u ...
- 微信开发上传多张图片html,微信JSSDK一次性上传多张图片卡死解决方案
应用场景描述 微信禁止了使用表单INPUT[TYPE="FILE"]上传图片,必须使用微信WEB JSSDK 图片上传,该插件是一张一张的上传的.过程是这样的 上传图片 --> ...
- 高手教你PHP上传多张图片
高手教你PHP上传多张图片 对于我们来说上传一张图片是非常简单的事情,这里教大家一个关于PHP上传多张图片的代码分析,希望对大家有帮助. 学习PHP时,你可能会遇到PHP上传多张图片问题,这里将介绍P ...
- ajax请求多张图片数据库,ajax上传多文件,一次上传多张图片
ajax上传多文件,一次上传多张图片 作者:PHPYuan 时间:2018-11-04 03:41:44 使用ajax上传文件,指望这个对象:let fd = new FormData(); html ...
- 如何在IPFS里面上传一张图片
之前有好几人问过小编,想在IPFS里面上传一张图片.如何做? 今天小编就讲一下如何在IPFS里面上传.下载文件? 1 下载IPFS软件 下载地址:https://dist.ipfs.io/#go-ip ...
- ios 拍照上传到服务器_ios端浏览器拍照上传到服务器,图片被旋转90度 php 解决方案...
1.可以通过前端进行解决,本案例通过后端解决的 判断请求的浏览器的ua,如果是ios浏览器则进行90度旋转 重点来了: 必须确保检测的图片是ios设备上传的完整图片,不要在前端压缩过的,因为压缩后的图 ...
最新文章
- Qt中禁止调节窗口大小
- Excel操作:导出到Excel并下载到web客户端
- OSPF邻接形成过程
- 最短Hamilton路径与旅行商问题联系与解决
- wxWidgets:wxActiveXContainer类用法
- 把字符串3,1,2,4以,分割拆分为数组,数组元素并按从小到大的顺序排列
- 点击事件为什么会失效_1917年的法蒂玛事件,为什么会被称为最为惊悚的UFO目击事件?...
- tablueau地图标记圆形_30天30张中国风地图,从青绿山水到秦砖汉瓦
- 正则表达式(读书过程所记未整理)
- css。元素样式、边框样式
- keepalived实现高可用nginx反向代理的简单案例
- 强调模型可复现性!英伟达与伦敦国王学院开源医学AI框架 MONAI
- tomcat顶层架构
- web安全day35:Linux防火墙进阶
- Loadrunner 去缓存
- 几种分段多项式曲线插值(拟合)的方式(含贝塞尔曲线和B样条[B-spline])
- 前端工具使用记录(css/js/htm)
- Java 语言使用 Observer/Observable 实现简单的观察者模式
- 如何在 LaTeX 中输入角度、角分、角秒?
- bat脚本使用winRAR命令行压缩文件
热门文章
- WPF杂难解 中文字体显示模糊
- Linux服务器之间传输文件 scp命令
- 拒绝低效加班,别让“囚徒困境”限制你的职业发展
- flex AdvancedDataGrid 高级表格 介绍 教程
- 会mysql不会sql_不是吧,不会有人还不知道MySQL中具实用的SQL语句
- mysql xtrabackup 保护模式_MySQL Xtrabackup备份原理和实现细节
- 重新打包mysql数据库文件_服务器每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件...
- arcgis 投影坐标系转地理坐标系_空间坐标与投影系统系列(二):国内常用投影坐标系...
- oracle rac单节点恢复,如何Oracle_RAC恢复一个节点总结
- Vivado设计流程(四)设计综合