当前位置:   article > 正文

iOS 对于AFNetworking3.x版本的二次封装包含(GET、POST、上传、下载)_af downloadtaskwithrequest

af downloadtaskwithrequest

对于AFNetworking的封装之前已经进行了封装了一次,可是AFN的持续更新,所以以后也得持久更新才行,后期我会使用cocopods或者carthage来管理,这样的话也方便。

话不多说转回主题,本次我进行二次封装的是3.x的,里边还是有些方法与之前的不一样的,这个版本主要是简单的一些数据请求,例如上传图片/音频,下载文件等,对于一些用户使用的AFN的版本不同,那么GET或者POST所调起的方法也不一样。例如请求过程中用到的progress。

对于返回的数据,我利用枚举的方式,将可能出现问题的问题给返回,这样就不需要每次都在这进行修改或者调试,当然,http响应码网上已经有很全了

  1. /**
  2. GET请求接口
  3. @param url 请求接口
  4. @param parameters 接口传入参数内容
  5. @param successful 成功Block返回
  6. @param failure 失败Block返回
  7. */
  8. - (void)GETUrl:(NSString *)url
  9. parameters:(NSDictionary *)parameters
  10. success:(void (^)(id responseObject))successful
  11. failure:(void (^) (NSError *error, ParamtersJudgeCode judgeCode))failure;
  1. /**
  2. GET请求接口
  3. @param url 请求接口
  4. @param parameters 接口传入参数内容
  5. @param successful 成功Block返回
  6. @param failure 失败Block返回
  7. */
  8. - (void)GETUrl:(NSString *)url
  9. parameters:(NSDictionary *)parameters
  10. success:(void (^)(id responseObject))successful
  11. failure:(void (^) (NSError *error, ParamtersJudgeCode judgeCode))failure
  12. {
  13. NSError *error = nil;
  14. //判断接口是否是空值
  15. if (url.length == 0 || [url isEqualToString:@""]) {
  16. failure(error, RequestUrlNil);
  17. }
  18. //开始请求内容
  19. [_sessionManager GET:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
  20. //如果需要填充进度内容,可以直接进行内容添加
  21. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  22. successful(responseObject);
  23. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  24. failure(error,RequestFailed);
  25. }];
  26. }
  27. /**
  28.  POST请求接口
  29.  @param url 请求接口
  30.  @param parameters 接口传入参数
  31.  @param successful 成功Block返回
  32.  @param failure 失败Block返回
  33.  */
  34. - (void)POSTUrl:(NSString *)url
  35.         parameters:(NSDictionary *)parameters
  36.         success:(void (^)(id responseObject))successful
  37.         failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure;
  38. /**
  39.  POST请求接口
  40.  
  41.  @param url 请求接口
  42.  @param parameters 接口传入参数
  43.  @param successful 成功Block返回
  44.  @param failure 失败Block返回  ParamtersJudgeCode 判断参数
  45.  */
  46. - (void)POSTUrl:(NSString *)url
  47.         parameters:(NSDictionary *)parameters
  48.         success:(void (^)(id responseObject))successful
  49.         failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure
  50. {
  51.     NSError *error = nil;
  52.     //判断接口是否是空值
  53.     if (url.length == 0 || [url isEqualToString:@""]) {
  54.         failure(error, RequestUrlNil);
  55.     }
  56.     //开始请求内容
  57.     [_sessionManager POST:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
  58.         //如果需要填充进度内容,可以直接进行内容添加
  59.     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
  60.         successful(responseObject);
  61.     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  62.         failure(error,RequestFailed);
  63.     }];
  64. }
  65. /**
  66.  图片上传接口(上传音频与图片是一致的,需要更改的只是 mimeType类型,根据要求设置对应的格式即可)
  67.  
  68.  @param url 请求接口
  69.  @param paramters 请求参数
  70.  @param pictureData 图片数据
  71.  @param pictureKey 与后台约定的 文件key
  72.  @param progress 上传进度
  73.  @param successful 成功返回
  74.  @param failure 失败返回
  75.  */
  76. - (void)HeaderUploadUrl:(NSString *)url parameters:(NSDictionary *)paramters
  77.             pictureData:(NSData *)pictureData
  78.              pictureKey:(NSString *)pictureKey
  79.                progress:(HttpProgress)progress
  80.                 success:(void (^) (id responseObject))successful
  81.                 failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure;
  82. /**
  83.  图片上传接口(上传音频与图片是一致的,需要更改的只是 mimeType类型,根据要求设置对应的格式即可)
  84.  
  85.  @param url 请求接口
  86.  @param paramters 请求参数
  87.  @param pictureData 图片数据
  88.  @param pictureKey 与后台约定的 文件key
  89.  @param progress 上传进度
  90.  @param successful 成功返回
  91.  @param failure 失败返回
  92.  */
  93. - (void)HeaderUploadUrl:(NSString *)url parameters:(NSDictionary *)paramters
  94.             pictureData:(NSData *)pictureData
  95.              pictureKey:(NSString *)pictureKey
  96.                progress:(HttpProgress)progress
  97.                 success:(void (^) (id responseObject))successful
  98.                 failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure
  99. {
  100.     NSError *error = nil;
  101.     //接口URL为空
  102.     if (url.length == 0 || [url isEqualToString:@""] ) {
  103.         failure(error, RequestUrlNil);
  104.     }
  105.     //传入参数为空
  106.     if ([self isNullToDictionary:paramters]) {
  107.         failure(error, ParamtersObjectNil);
  108.     }
  109.     //传入上传图片数据为空(NSData)
  110.     if (pictureData.length == 0) {
  111.         failure(error, UploadPictureDataNil);
  112.     }
  113.     //上传图片,服务器端文件名
  114.     if (pictureKey.length == 0 || [pictureKey isEqualToString:@""]) {
  115.         failure(error, UploadPictureKeyNil);
  116.     }
  117.     
  118.     
  119.     [_sessionManager POST:url parameters:paramters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
  120.         //对上传完文件的配置
  121.         //获取当前时间(int 时间戳转换)
  122.         int nowDate = [[NSString stringWithFormat:@"%ld",(long)[[NSDate date] timeIntervalSince1970]]intValue];
  123.         NSString *fileName = [NSString stringWithFormat:@"%d.jpg",nowDate];
  124.         //参数介绍
  125.         //fileData : 图片资源  name : 预定key   fileName  : 文件名  mimeType    : 资源类型(根据后台进行对应配置)
  126.        [formData appendPartWithFileData:pictureData name:pictureKey fileName:fileName mimeType:@"image/jpeg"];
  127.     } progress:^(NSProgress * _Nonnull uploadProgress) {
  128.         //上传进度
  129.         dispatch_sync(dispatch_get_main_queue(), ^{
  130.             progress ? progress(uploadProgress) : nil;
  131.         });
  132.         
  133.     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
  134.         successful(responseObject);
  135.     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  136.         //可以将http响应码返回,以便于判断错误
  137.         failure(error,[self showResponseCode:task.response]);
  138.     }];
  139. }
  140. /**
  141.  下载文件接口
  142.  
  143.  @param url 请求接口
  144.  @param progress 下载进度
  145.  @param downloadFilePath 文件保存路径
  146.  @param successful  返回路径内容
  147.  @param failure 失败返回
  148.  */
  149. - (void)downloadUrl:(NSString *)url
  150.            progress:(HttpProgress)progress
  151.    downloadFilePath:(NSString *)downloadFilePath
  152.             success:(void (^) (id responseObject))successful
  153.             failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure;
  154. /**
  155.  下载文件接口
  156.  @param url 请求接口
  157.  @param progress 下载进度
  158.  @param downloadFilePath 文件保存路径
  159.  @param successful  返回路径内容
  160.  @param failure 失败返回
  161.  */
  162. - (void)downloadUrl:(NSString *)url
  163.         progress:(HttpProgress)progress
  164.         downloadFilePath:(NSString *)downloadFilePath
  165.         success:(void (^) (id responseObject))successful
  166.         failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure
  167.   {
  168.     //下载地址
  169.     NSURL *downloadURL = [NSURL URLWithString:url];
  170.     //设置请求
  171.     NSURLRequest *request = [NSURLRequest requestWithURL:downloadURL];
  172.     //下载操作
  173.     [_sessionManager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
  174.         //下载进度
  175.         dispatch_sync(dispatch_get_main_queue(), ^{
  176.             progress ? progress(downloadProgress) : nil;
  177.         });
  178.         
  179.     } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
  180.         //拼接缓存目录
  181.         NSString *downloadPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:downloadFilePath ? downloadFilePath : @"Download"];
  182.         //打开文件管理器
  183.         NSFileManager *fileManager = [NSFileManager defaultManager];
  184.         //创建Download目录
  185.         [fileManager createDirectoryAtPath:downloadPath withIntermediateDirectories:YES attributes:nil error:nil];
  186.         //拼接文件路径
  187.         NSString *filePath = [downloadPath stringByAppendingPathComponent:response.suggestedFilename];
  188.         //返回文件位置的URL路径
  189.         return [NSURL fileURLWithPath:filePath];
  190.     } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
  191.         NSInteger responseCode = [self showResponseCode:response];
  192.         if (responseCode != 200) {
  193.             successful ? successful(filePath.absoluteString): nil;
  194.         }else {
  195.             failure(error, UploadFailed);
  196.         }
  197.     }];
  198. }
  199. 对于AFHTTPSessionManager的属性,我使用单利方式直接进行了配置。这里就不展示了,有需要的话可以去我的GitHub上查看即可。地址:传送
  200.  

 




声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号