AFNetworking批量上传图片问题

AFNetworking 3.0 上传图片 进度progress显示 我是一个初学者,希望大家不要喷,写这个都是因为我写的时候没有搜到,方便那些像我一样遇到这个困惑的初学者。 我的进度条是用MBProgressHUB写的  MBProgressHUD * _hud; _hud = [[MBProgressHUD alloc]initWithView:self.view]; _hud.labelText = @"正在上传"; 阅读详情

异步请求的返回先后顺序没有一定,很可能后发出的请求先返回;但是最后回调的时候,请求返回的结果必须要按请求发出的顺序排列。比如,一个很常见的处理是,上传图片的接口返回该图片的 url;那么回调结果里的 url 顺序显然需要跟上传的图片顺序一一对应上。为此提出一个解决方案,方法很多,本文使用GCD解决



- (NSURLSessionUploadTask*)uploadTaskWithImage:(UIImage*)image completion:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionBlock {
    // 构造 NSURLRequest
    NSError* error = NULL;
    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[self uploadUrl] parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        NSData* imageData = UIImageJPEGRepresentation(image, 0.1);
        [formData appendPartWithFileData:imageData name:@"file" fileName:@"FileName" mimeType:@"multipart/form-data"];
    } error:&error];

    // 可在此处配置验证信息

    // 将 NSURLRequest 与 completionBlock 包装为 NSURLSessionUploadTask
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {
    } completionHandler:completionBlock];

    return uploadTask;
}



批量发出请求的方法


-  (void)batchRequest {
    // 需要上传的数据
    NSArray* images = [self images];

    // 准备保存结果的数组,元素个数与上传的图片个数相同,先用 NSNull 占位
    NSMutableArray* result = [NSMutableArray array];
    for (UIImage* image in images) {
        [result addObject:[NSNull null]];
    }

    dispatch_group_t group = dispatch_group_create();

    for (NSInteger i = 0; i < images.count; i++) {

        dispatch_group_enter(group);

        NSURLSessionUploadTask* uploadTask = [self uploadTaskWithImage:images[i] completion:^(NSURLResponse *response, NSDictionary* responseObject, NSError *error) {
            if (error) {
                NSLog(@"第 %d 张图片上传失败: %@", (int)i + 1, error);
                dispatch_group_leave(group);
            } else {
                NSLog(@"第 %d 张图片上传成功: %@", (int)i + 1, responseObject);
                @synchronized (result) { // NSMutableArray 是线程不安全的,所以加个同步锁
                    result[i] = responseObject;
                }
                dispatch_group_leave(group);
            }
        }];
        [uploadTask resume];
    }

    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"上传完成!");
        for (id response in result) {
            NSLog(@"%@", response);
        }
    });
}	

其中dispatch_group_notify等待group中所以线程结束再调用

dispatch_group_enter(group)和dispatch_group_leave(group);必须成对出现,编译器会强制识别当出现dispatch_group_leave全部结束才执行dispatch_group_notify。

AFNetworking (可以上传图片) AFNetWorking 可以上传图片,找了两天才找到 立即下载

相关推荐

11.15 分析finrl 的框架

11.15 分析finrl 的框架

yueguoqing88的博客 1086

iOS 多个异步任务的监控

iOS 多个异步任务的http://outofmemory.cn/objective-c/ios-async-task-monitor在发起网络请求时,我们一般会用异步请求,这里我们以 AFNetWorking 为例:AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manage...

allanGold 1368

IDEA 2023.2最新破解安装教程(含详细配置步骤及常见问题解决)

本文详细介绍了IDEA 2023.2的安装流程及高效开发环境搭建指南,涵盖基础配置、项目结构优化、核心功能使用、插件推荐、性能优化等全方位内容,帮助开发者快速掌握这一强大的Java开发工具。

x2y3z4a5b的博客 1754

使用AFNetworking进行图片上传

//图片 NSData* imageData = UIImagePNGRepresentation(tempImage); //上传图片 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFHTTPResponseSer

1550

PyTorch模型生产部署:ONNX/Triton导出与高可用架构实战

机器学习模型部署本质是训练环境与生产环境之间的运行时契约建立过程,涉及序列化协议、推理引擎兼容性、动态批处理及资源隔离等核心问题。ONNX凭借标准化算子集和跨框架支持,成为平衡兼容性、性能与可维护性的首选导出格式;Triton Inference Server则通过原生多框架支持、动态batching和热加载能力,显著提升GPU利用率与服务SLA保障水平。在金融风控、电商推荐等高要求场景中,基于ONNX+Triton+K8s的分层架构可稳定支撑千级QPS与毫秒级P95延迟,同时满足模型热更新、可观测性与版本

weixin_33857679的博客 448

基于PLC的矿用排水控制系统设计【附代码】

(3)矿用排水控制系统的软件设计 研究设计了矿用排水控制系统的软件,包括PLC程序的编写和上位机监控画面的设计。(2)矿用排水控制系统的硬件设计 研究对矿用排水控制系统的硬件进行了选型和设计,包括矿用多级耐磨离心泵、三相异步防爆电机等执行设备的选型,以及控制系统所需用到的各类型传感器、PLC的I/O点分配及选型。(1)矿用排水控制系统的现状分析 研究首先对矿井排水系统的现状进行了分析,指出了现有系统存在的问题,如自动化程度低、劳动强度大、设备维护困难等。✅ 具体问题可以私信或查看文章底部二维码。

lagougongzuoshi的博客 1175

iOS学习-AFNetworking上传多张图片至后台

iOS学习-AFNetworking上传多张图片至后台

qq_43441647的博客 849

CH569 USBSS库函数分析

CH569 USB3.0 解析

havc_W的博客 7687

上传图片(jpeg, png各种类型), 及视频

这段时间需要整理一些东西, 先备注在这里, 将

Jacky Shin的专栏 3万+

保姆级教程:用ROS2 Humble和激光雷达,5分钟搞定机器人避障(附Python代码)

本文提供了一份详细的ROS2 Humble激光雷达避障实战指南,帮助开发者快速实现机器人避障功能。通过环境配置、硬件连接和Python代码实现,5分钟内即可让机器人自主避开障碍物。文章还涵盖了参数调优、常见问题排查及进阶优化技巧,适合机器人开发初学者和进阶用户。

weixin_42528902的博客 342

【DaVinci Developer专题】-8-创建一个枚举Enum ADT(Application Data Type)

目录 1 创建一个枚举Value ADT(Application Data Type) 1.1 命名application data type 1.2 创建一个computation method计算方法属性 1.3 创建一个Contraint约束条件属性 2 创建了一个新的Type Mapping Sets 3 创建了一个S/R Port Interface 4 SWC引用Type Mapping set 5 导入CFG生成代码的总结 6 结尾 <--返回「实战篇」博文-总目录-

「汽车电子助手」的博客 2292

AFNetworking 3 批量上传图片的 3 种方法

AFNetworking 在去年年底升级到了 3.0。这个版本更新想必有很多好处,然而让我吃惊的是,它并没有 batch request 接口。之前的 1.x 版本、2.x 版本都实现了这个很常见的需求,不知道作者为何选择在 3.x 中去掉它。 在 AFNetworking 2 中,我们只需一行代码就能解决批量上传的问题: [AFURLConnectionOperation batchOfRe

努力,可能成功!放弃,注定失败! 3317

一种基于机载LiDAR点云电力线自动提取方法

文章目录一、引言二、算法实现2.1实现步骤2.2实现代码 一、引言 二、算法实现 2.1实现步骤 (1)首先采用首先采用高程滤波方法去除地面点和低矮地物点,滤波后的点云数据中除电力线点云外还含部分杆塔点、高植被点和噪声点。 (2)根据点云空间维度特征提取电力线点,使用空间密度聚类的方法实现单根电力线精确分离。 2.2实现代码 在这里插入代码片 ...

dayuhaitang1的博客 5172

AFNetworking上传一张或多张图片,并压缩图片节约占用内存

最近在做APP的时候,遇到了难题:根据公司需求,在用户评论并上传图片的时候,有的手机像素比较高拍的照片高清的,但是每张图片占用的内存太大,或者上传照片的时候,相册的部分照片本身就占很大内存空间,后台数据库内存量有限,如果后期用户达到了几百万,每个用户都评论并上传这么高像素大内存的图片上去,后台数据库怕承受不了,继续拓展后台存储量的话,需要很大成本,那么怎么在前台来处理这些上传的图片而又...

weixin_30888707的博客 138

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

iOS 批量上传图片的 3 种方法

AFNetworking 在去年年底升级到了 3.0。这个版本更新想必有很多好处,然而让我吃惊的是,它并没有 batch request 接口。之前的 1.x 版本、2.x 版本都实现了这个很常见的需求,不知道作者为何选择在 3.x 中去掉它。 在 AFNetworking 2 中,我们只需一行代码就能解决批量上传的问题: [AFURLConnectionOperation batchOfRequestOperations:operations progressBlock:^(NSUInteger n

默然相爱鱼鱼鱼的博客 2529

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

用AFNetworking上传图片

用AFNetworking上传图片

RainShenJi的专栏 2520

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

使用AFNetworking图片上传post带参数

第一次做图片上传,研究了一天网上虽然有很多例子可是不是很明白。 图片上传主要就是来自照相机和相册 来自相机我们调用一下代码 BOOL isCamera = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]; if (!isCamera) {

u011978272的专栏 4985

OC - 使用AFNetworking进行图片上传

项目中,我们经常会用到上传图片的功能,而目前的上传图片分为两种(我只知道两种,哈哈哈),一种是以将图片加密转成字符串的形式,另一种是以文件流的形式进行上传。记得去年12月份在网上随便找了一下,可能是我太low,找了好久没找到。本来早就想总结一下,可是呢...我吧...懒得看AFNetworking源码,就一直搁置了,今天工作做完了,正好分享一下。 第一种方式:文件流方式进行上传     AFH

LJ·杨的博客 2万+

AFNetworking上传图片

使用AFNetworking上传图片,(可一次上传多张图片,包含不同类型png, jpeg) 使用AFNetworking上传视频     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];     AFHTTPRequestOperation *o

xiaotian9959的专栏 731

ios 上传多张图片总结——IOS网络访问之使用AFNetworking

ios 上传图片文件 或者 视频    AFHTTPRequestOperationManager 上传图片(多张)参考文献: http://www.blogjava.net/qileilove/archive/2014/12/11/421323.html 下面两个函数是可以用的: [formData appendPartWithFileData: name: f

bible521125的专栏 2258

AFNetworking实现POST上传文件——图片、.json、MP4,,,,,等各种类型。

导入AFNetworking框架后,使用步骤如下: 第一步:获取上传网址。如下所示:NSString *url = @"http://127.0.0.1/post/upload.php"; 第二步:新建AFHTTPRequestOperationManager对象,具体如下: AFHTTPRequestOperationManager *manager = [AFHTTPRequest

9100

AFNetworking 3.0上传图片

//#pragma mark - 上传图片 - (void)uploadImageWithImage:(UIImage *)image {     //截取图片     NSData *imageData = UIImageJPEGRepresentation(image, 0.001);     AFHTTPSessionManager *manager = [AFHTTPSessi

Rio的博客 6102
上一篇: 选择器 描述
下一篇: iOS启动APP,播放视频,会出现黑屏
develop_csdn_LGQ
博客等级 码龄10年 21粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值