Fork me on GitHub

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];

posted @   极度恐慌_JG  阅读(770)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示