参考地址: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(@"队列组:前面的耗时操作都完成了,回到主线程进行相关操作");});

 

我只能说想法很完美啊,网上也不只提出这种方案,但是我的实践过程是有问题了。网络请求延迟,队列组不可控。所以放弃

方案三:利用数组的有序性:

怎么个利用法?请看:

  1. 创建一个模型、两个属性第一个你要上传的数据信息如:image 或者 data ,根据你上传函数需要的参数来定。第二个属性:NSString URL 服务端返回的图片地址:

  2. 将你要上传的图片数组、封装成模型数组,数组是有序的这就是重点,for 循环 模型作为参数调用图片上传函数,请求成功后更新模型的值

  3. 判断所有的图片上传完毕,然后,就从模型数组里面去取 ,图片 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连续上传多张图片相关推荐

  1. Java IOS客户端上传多张图片到服务端

    Java IOS客户端上传多张图片到服务端 业务场景:用户相册需要上传多张图片到服务器,上限为12张.本文主要介绍Java服务端的文件和流的处理. 下图为iOS端和服务端最终结果一览.  iOS端 : ...

  2. iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样

    // 上传多张图片 - (void)send {// 设置初始记录量为0self.count = 0;self.upcount = 0;// 设置初始值为NOself.isUploadPictures ...

  3. php上传多张图片为什么只显示一张,javascript,_js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次???,javascript - phpStudy...

    js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? self.$els.upload ...

  4. 微信小程序-上传多张图片加进度,持续修正中……

    tips.参考网上资料的改进版 1.怎么使用.html <!--无限制需要在js代码里设置数量,upload为上传地址,或者说图片服务器--><up-picurl="{{u ...

  5. 微信开发上传多张图片html,微信JSSDK一次性上传多张图片卡死解决方案

    应用场景描述 微信禁止了使用表单INPUT[TYPE="FILE"]上传图片,必须使用微信WEB JSSDK 图片上传,该插件是一张一张的上传的.过程是这样的 上传图片 --> ...

  6. 高手教你PHP上传多张图片

    高手教你PHP上传多张图片 对于我们来说上传一张图片是非常简单的事情,这里教大家一个关于PHP上传多张图片的代码分析,希望对大家有帮助. 学习PHP时,你可能会遇到PHP上传多张图片问题,这里将介绍P ...

  7. ajax请求多张图片数据库,ajax上传多文件,一次上传多张图片

    ajax上传多文件,一次上传多张图片 作者:PHPYuan 时间:2018-11-04 03:41:44 使用ajax上传文件,指望这个对象:let fd = new FormData(); html ...

  8. 如何在IPFS里面上传一张图片

    之前有好几人问过小编,想在IPFS里面上传一张图片.如何做? 今天小编就讲一下如何在IPFS里面上传.下载文件? 1 下载IPFS软件 下载地址:https://dist.ipfs.io/#go-ip ...

  9. ios 拍照上传到服务器_ios端浏览器拍照上传到服务器,图片被旋转90度 php 解决方案...

    1.可以通过前端进行解决,本案例通过后端解决的 判断请求的浏览器的ua,如果是ios浏览器则进行90度旋转 重点来了: 必须确保检测的图片是ios设备上传的完整图片,不要在前端压缩过的,因为压缩后的图 ...

最新文章

  1. Qt中禁止调节窗口大小
  2. Excel操作:导出到Excel并下载到web客户端
  3. OSPF邻接形成过程
  4. 最短Hamilton路径与旅行商问题联系与解决
  5. wxWidgets:wxActiveXContainer类用法
  6. 把字符串3,1,2,4以,分割拆分为数组,数组元素并按从小到大的顺序排列
  7. 点击事件为什么会失效_1917年的法蒂玛事件,为什么会被称为最为惊悚的UFO目击事件?...
  8. tablueau地图标记圆形_30天30张中国风地图,从青绿山水到秦砖汉瓦
  9. 正则表达式(读书过程所记未整理)
  10. css。元素样式、边框样式
  11. keepalived实现高可用nginx反向代理的简单案例
  12. 强调模型可复现性!英伟达与伦敦国王学院开源医学AI框架 MONAI
  13. tomcat顶层架构
  14. web安全day35:Linux防火墙进阶
  15. Loadrunner 去缓存
  16. 几种分段多项式曲线插值(拟合)的方式(含贝塞尔曲线和B样条[B-spline])
  17. 前端工具使用记录(css/js/htm)
  18. Java 语言使用 Observer/Observable 实现简单的观察者模式
  19. 如何在 LaTeX 中输入角度、角分、角秒?
  20. bat脚本使用winRAR命令行压缩文件

热门文章

  1. WPF杂难解 中文字体显示模糊
  2. Linux服务器之间传输文件 scp命令
  3. 拒绝低效加班,别让“囚徒困境”限制你的职业发展
  4. flex AdvancedDataGrid 高级表格 介绍 教程
  5. 会mysql不会sql_不是吧,不会有人还不知道MySQL中具实用的SQL语句
  6. mysql xtrabackup 保护模式_MySQL Xtrabackup备份原理和实现细节
  7. 重新打包mysql数据库文件_服务器每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件...
  8. arcgis 投影坐标系转地理坐标系_空间坐标与投影系统系列(二):国内常用投影坐标系...
  9. oracle rac单节点恢复,如何Oracle_RAC恢复一个节点总结
  10. Vivado设计流程(四)设计综合