AFNetworking网络请求与图片上传工具(POST)
AFNetworking网络请求与图片上传工具(POST)
.h文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #import <Foundation/Foundation.h> /** 成功Block */ typedef void (^SuccessBlockType) ( id responsData); /** 失败Block */ typedef void (^FaileBlockType) ( NSError *error); @interface NetDataEngine : NSObject //网络请求 + ( void )postServerUrl:( NSString *)url parameters:( NSDictionary *)parameters success:(SuccessBlockType)success failure:(FaileBlockType)failure; //上传图片 + ( void )uploadWith:(UIImage *)upImg success:(SuccessBlockType)success failure:(FaileBlockType)failure; @end |
.m文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #import "NetDataEngine.h" #import "AFNetworking.h" @implementation NetDataEngine +(AFHTTPSessionManager *)manager { AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 声明上传的是json格式的参数,需要你和后台约定好,不然会出现后台无法获取到你上传的参数问题 manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 上传普通格式 // manager.requestSerializer = [AFJSONRequestSerializer serializer]; // 上传JSON格式 // 声明获取到的数据格式 manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // AFN不会解析,数据是data,需要自己解析 // manager.responseSerializer = [AFJSONResponseSerializer serializer]; // AFN会JSON解析返回的数据 // 个人建议还是自己解析的比较好,有时接口返回的数据不合格会报3840错误,大致是AFN无法解析返回来的数据 // 超时时间 [manager.requestSerializer willChangeValueForKey:@ "timeoutInterval" ]; manager.requestSerializer.timeoutInterval = 10.f; //设置请求超时时间 [manager.requestSerializer didChangeValueForKey:@ "timeoutInterval" ]; return manager; } + ( void )postServerUrl:( NSString *)url parameters:( NSDictionary *)parameters success:(SuccessBlockType)success failure:(FaileBlockType)failure { AFHTTPSessionManager *manager = [ self manager]; [manager POST:url parameters:parameters progress: nil success:^( NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSDictionary *dict = [ NSJSONSerialization JSONObjectWithData:responseObject options: NSJSONReadingMutableContainers error: nil ]; // JGLog(@"%@",dict); success(dict); } failure:^( NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { // JGLog(@"error: %@",error); failure(error); }]; } + ( void )uploadWith:(UIImage *)upImg success:(SuccessBlockType)success failure:(FaileBlockType)failure { // 创建管理者对象 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager POST:UP_PIC parameters: nil constructingBodyWithBlock:^( id <AFMultipartFormData> _Nonnull formData) { // 获取图片数据 NSData *fileData = UIImagePNGRepresentation(upImg); // 设置上传图片的名字 NSDateFormatter *formatter = [[ NSDateFormatter alloc] init]; formatter.dateFormat = @ "yyyyMMddHHmmss" ; NSString *str = [formatter stringFromDate:[ NSDate date]]; NSString *fileName = [ NSString stringWithFormat:@ "%@.png" , str]; [formData appendPartWithFileData:fileData name:@ "image" fileName:fileName mimeType:@ "image/png" ]; } progress: nil success:^( NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //上传成功后回调 success(responseObject); } failure:^( NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {<br> //失败回调 failure(error); }]; } @end |
如果网络请求超时,就在请求失败中执行超时操作,如:取消指示器,提示用户网络存在问题等。
if (error.code == -1001) {
[MBProgressHUD showError:@"网络超时,请检查网络"];
}
//隐藏指示器
[SVProgressHUD dismiss];
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~