时间:2021-05-20
先看描述
需求是怎样的:for 循环里面、多个网络请求上传图片,每次上传一张,至于为什么每次只上传一张呢,因为上传一张将要返回图片存储服务器的地址,然后再把地址作为请求参数,请求自己服务器的 API。
过程可以说曲折,不过也有收获
解决方案一:
递归调用上传图片的函数、第一张请求成功后,然后第二张,依次进行。当然效率肯定不高,即使上传图片的AFN方法做了多线程处理。中间上传失败了,还继续上传吗?需求决定。所有放弃
解决方案二:
使用GCD 队列组:这里就直接贴代码了:
我只能说想法很完美啊,网上也不只提出这种方案,但是我的实践过程是有问题了。网络请求延迟,队列组不可控。所以放弃
方案三:利用数组的有序性:
怎么个利用法?请看:
创建一个模型、两个属性第一个你要上传的数据信息如:image 或者 data ,根据你上传函数需要的参数来定。第二个属性:NSString URL 服务端返回的图片地址:
将你要上传的图片数组、封装成模型数组,数组是有序的这就是重点,for 循环 模型作为参数调用图片上传函数,请求成功后更新模型的值
判断所有的图片上传完毕,然后,就从模型数组里面去取 ,图片 url ,请求自己的服务器api
好了,应该很清楚吧。不清楚再上点干货:
model:
// 建立这个类的目的、主要是为了for循环多张图片上传、成功后回来的地址顺序问题#import @interface FMUploadModel : NSObject//根据自己的上传函数需要决定@property (nonatomic,strong) NSArray * dataArray;@property (nonatomic,copy) NSString *imgUrl;@endfunction//开辟一个多线程 执行图片上传工作 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关于多张图片上传、地址返回顺序问题及解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
发现还没有aspupload这个组件的,这两样功能的解决方案,现把我的改进方案写在这里!谢谢关于aspupload上传组件,文件重命名,进度条的问题解决方案!共
报错信息一:jQuery.handleErrorisnotafunction上传图片的时候,通过F12,查看到这个错误。解决方案:jquery版本问题,hand
问题如何判断inputfile表单里上传的图片的宽高和大小呢?解决方案这个时候图片还没真正上传,也不是在页面上展示,不能使用$(“#id”).width(),$
本文为大家分享了AndroidRetrofit2.0框架上传图片解决方案,具体内容如下1.单张图片的上传/***上传一张图片*@paramdescription
基础的定义及使用方法网上有很多不再概述,这儿主要写本人所使用项目时碰到的一些问题及解决方案注:本人使用此插件主要用来上传图片之用,插件其他上传文件没有涉及一、上