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];
                        }];
                    }];
                }
            });
iOS连续上传多张图片的更多相关文章
- iOS 解决上传100张图片内存奔溃问题
		最近项目需求,从相册中提取100张图片,然后上传到服务器.前提是图片不能压缩.因为要将图片信息采集出来制作出3D模型.所以必须是高清图片. 先看下代码 [NetWorking uploadWithUr ... 
- iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样
		// 上传多张图片 - (void)send { // 设置初始记录量为0 self.count = 0; self.upcount = 0; // 设置初始值为NO self.isUploadPic ... 
- 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题
		微信多图片上传必须挨个上传,也就是不能并行,得串行: 那么我们可以定义一个如下所示的上传函数: var serverIds = []; function uploadImages(localImage ... 
- POST请求上传多张图片并携带参数
		POST请求上传多张图片并携带参数 在iOS中,用POST请求携带参数上传图片是非常恶心的事情,HTTPBody部分完全需要我们自己来配置,这个HTTPBody分为3个部分,头部分可以携带参数,中间部 ... 
- 利用exif.js解决ios手机上传竖拍照片旋转90度问题
		html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ... 
- iOS如何上传代码到Github
		iOS如何上传代码到Github 很多iOS开发者想开源自己的代码或者demo,开源到Github是个不错的选择,那么如何上传我们的代码到Github,令所有人可以下载使用呢?这里我们的目的很明确,就 ... 
- php用jquery-ajax上传多张图片限制图片大小
		php用jquery-ajax上传多张图片限制图片大小 /** * 上传图片,默认大小限制为3M * @param String $fileInputName * @param number $siz ... 
- 修正ios h5上传图时的图片方向问题
		.ios上传会在exif中带一个 Orientation的属性,这个属性在windows中不会生效,在ios浏览器中会生效,造成图片在windows资源管理器中与ios浏览器中方向不一致 为了用户 ... 
- 微信JSSDK上传多张图片
		之前是使用for循环实现的,但是安卓手机没有问题,苹果手机只能上传最后一张图片. 好在有高手在前面趟路,实用的循环调用.苹果是没有,安卓不清楚.以下内容转自:http://leo108.com/pid ... 
随机推荐
- 剑指offer面试题5:逆序打印单链表(Java)
			Java创建单链表(头插法.尾插法),并逆序打印单链表: package day_0324; import java.util.Scanner; import java.util.Stack; cla ... 
- RabbitMQ与java、Spring结合实例详细讲解
			林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了rabbitMq,提供了如何在Ubuntu下安装RabbitMQ 服务的方法. ... 
- windows内核情景分析之—— KeRaiseIrql函数与KeLowerIrql()函数
			windows内核情景分析之—— KeRaiseIrql函数与KeLowerIrql()函数 1.KeRaiseIrql函数 这个 KeRaiseIrql() 只是简单地调用 hal 模块的 KfRa ... 
- sklearn提供的自带的数据集
			sklearn 的数据集有好多个种 自带的小数据集(packaged dataset):sklearn.datasets.load_<name> 可在线下载的数据集(Downloaded ... 
- Clojure 学习入门(14)—— 循环控制
			Clojure 基于函数的流程控制 repeatedly 字面意思为重复函数.一般的用法如下: #(rand-int 11)) 8 2 6 6) 重复产生5次随机数.rand-int 11表示0至 ... 
- vue案例 - v-model实现自定义样式の多选与单选
			接,上文:https://www.cnblogs.com/padding1015/p/9265985.html 这两天在玩mpvue,但是下午如果对着文档大眼瞪小眼的话,肯定会睡着的. 想起昨晚的fl ... 
- Linux命令 swap:内存交换空间
			swap 内存交换空间的概念 swap使用上的限制 
- LeetCode 11 Container With Most Water(分支判断问题)
			题目链接 https://leetcode.com/problems/container-with-most-water/?tab=Description Problem: 已知n条垂直于x轴的线 ... 
- Sencha Touch 实战开发培训 视频教程 第二期 第二节
			2014.4.9晚上8:00分开课. 本节课耗时接近1个半小时,需要一点耐心来观看. 本期培训一共八节,前两节免费,后面的课程需要付费才可以观看. 本节内容: 了解Container: 了解card布 ... 
- 常用linux命令及shell脚本
			参考:Linux命令大全 分割大文件 Split命令 按行分割(只能是文本文件) $split -l 1000 big_file 前缀 按文件大小分割 $split -b 64m big_file 前 ... 
