Coder Social home page Coder Social logo

boai / banetmanager Goto Github PK

View Code? Open in Web Editor NEW
341.0 13.0 91.0 1.63 MB

基于AFNetworking 3.0、3.1最新版本的封装,集成了 get / post / put / delete 方法请求数据,单图/多图上传,视频上传/下载,网络监测 等多种网络请求方式,

License: MIT License

Objective-C 88.22% Ruby 6.51% C 5.28%

banetmanager's Introduction

BANetManager

BAHome Team Name codecov.io

1、功能及简介

  • 1、集成 get / post / put / delete 等常用请求方式的封装
  • 2、集成单图/多图上传,让图片上传更简单,自带压缩处理
  • 3、集成视频上传/下载,和文件下载,让视频的上传下载更方便,支持异步下载【已测试多个项目通过】
  • 4、集成网络监测,让你实时监测你的宝贝APP的网络状态【已经测试通过】
  • 5、新增 https 请求参数自定义:requestSerializer、responseSerializer、请求头等的配置
  • 6、自定义 CA 证书 和 HTTPS 请求配置,只需把证书导入项目目录即可
  • 7、如果使用PHP后台,后台不会对接此接口的话,博爱已经为你们量身定做了PHP后台接口,你们只需要把文件夹中的 postdynamic.php 文件发送给你们的PHP后台同事,他们就知道了,里面都有详细说明!
  • 8、新增 YYCache 缓存处理,有缓存开关,随时缓存
  • 9、新增自定义:超时设置,取消单个网络请求和取消所有网络请求
  • 10、史上最全的 AFN 请求 NSLog 打印,详见 demo 控制台打印结果
  • 11、新增 清除 请求头
  • 12、新增 文件上传
  • 13、优化多图上传
  • 14、控制台打印 debug 状态下显示中文
  • 15、新增 默认请求头:@"application/x-www-form-urlencoded"
  • 16、新增 删除所有缓存的方法,可以自由删除当前的所有缓存!
  • 17、新增单元测试

2、图片示例

BANetManager1.png

3、安装、导入示例和源码地址

  • 1、pod 导入【最新版本:】:
    pod 'BANetManager'
    如果发现 pod search BANetManager 搜索出来的不是最新版本,需要在终端执行 cd 转换文件路径命令退回到 desktop,然后执行 pod setup 命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了。
    具体步骤:
    • pod setup : 初始化
    • pod repo update : 更新仓库
    • pod search BANetManager
  • 2、文件夹拖入:下载demo,把 BANetManager 文件夹拖入项目即可,
  • 3、导入头文件:
    #import "BANetManager.h"
  • 4、项目源码地址:
    OC 版 :https://github.com/BAHome/BANetManager

4、BANetManager 的类结构及 demo 示例

BANetManager.png

BANetManager.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>


#define BANetManagerShare [BANetManager sharedBANetManager]

#define BAWeak  __weak __typeof(self) weakSelf = self

/*! 过期属性或方法名提醒 */
#define BANetManagerDeprecated(instead) __deprecated_msg(instead)


/*! 使用枚举NS_ENUM:区别可判断编译器是否支持新式枚举,支持就使用新的,否则使用旧的 */
typedef NS_ENUM(NSUInteger, BANetworkStatus)
{
    /*! 未知网络 */
    BANetworkStatusUnknown           = 0,
    /*! 没有网络 */
    BANetworkStatusNotReachable,
    /*! 手机 3G/4G 网络 */
    BANetworkStatusReachableViaWWAN,
    /*! wifi 网络 */
    BANetworkStatusReachableViaWiFi
};

/*!定义请求类型的枚举 */
typedef NS_ENUM(NSUInteger, BAHttpRequestType)
{
    /*! get请求 */
    BAHttpRequestTypeGet = 0,
    /*! post请求 */
    BAHttpRequestTypePost,
    /*! put请求 */
    BAHttpRequestTypePut,
    /*! delete请求 */
    BAHttpRequestTypeDelete
};

typedef NS_ENUM(NSUInteger, BAHttpRequestSerializer) {
    /** 设置请求数据为JSON格式*/
    BAHttpRequestSerializerJSON,
    /** 设置请求数据为HTTP格式*/
    BAHttpRequestSerializerHTTP,
};

typedef NS_ENUM(NSUInteger, BAHttpResponseSerializer) {
    /** 设置响应数据为JSON格式*/
    BAHttpResponseSerializerJSON,
    /** 设置响应数据为HTTP格式*/
    BAHttpResponseSerializerHTTP,
};

/*! 实时监测网络状态的 block */
typedef void(^BANetworkStatusBlock)(BANetworkStatus status);

/*! 定义请求成功的 block */
typedef void( ^ BAResponseSuccessBlock)(id response);
/*! 定义请求失败的 block */
typedef void( ^ BAResponseFailBlock)(NSError *error);

/*! 定义上传进度 block */
typedef void( ^ BAUploadProgressBlock)(int64_t bytesProgress,
int64_t totalBytesProgress);
/*! 定义下载进度 block */
typedef void( ^ BADownloadProgressBlock)(int64_t bytesProgress,
int64_t totalBytesProgress);

/*!
 *  方便管理请求任务。执行取消,暂停,继续等任务.
 *  - (void)cancel,取消任务
 *  - (void)suspend,暂停任务
 *  - (void)resume,继续任务
 */
typedef NSURLSessionTask BAURLSessionTask;

@class BADataEntity;

@interface BANetManager : NSObject

/**
 创建的请求的超时间隔(以秒为单位),此设置为全局统一设置一次即可,默认超时时间间隔为30秒。
 */
@property (nonatomic, assign) NSTimeInterval timeoutInterval;

/**
 设置网络请求参数的格式,此设置为全局统一设置一次即可,默认:BAHttpRequestSerializerJSON
 */
@property (nonatomic, assign) BAHttpRequestSerializer requestSerializer;

/**
 设置服务器响应数据格式,此设置为全局统一设置一次即可,默认:BAHttpResponseSerializerJSON
 */
@property (nonatomic, assign) BAHttpResponseSerializer responseSerializer;

/**
 自定义请求头:httpHeaderField
 */
@property(nonatomic, strong) NSDictionary *httpHeaderFieldDictionary;

/**
 是否开启 log 打印,默认不开启
 */
@property(nonatomic, assign) BOOL isOpenLog;

/*!
 *  获得全局唯一的网络请求实例单例方法
 *
 *  @return 网络请求类BANetManager单例
 */
+ (instancetype)sharedBANetManager;


#pragma mark - 网络请求的类方法 --- get / post / put / delete

/**
 网络请求的实例方法 get

 @param entity 请求信息载体
 @param successBlock 请求成功的回调
 @param failureBlock 请求失败的回调
 @param progressBlock 进度回调
 @return BAURLSessionTask
 */
+ (BAURLSessionTask *)ba_request_GETWithEntity:(BADataEntity *)entity
                                  successBlock:(BAResponseSuccessBlock)successBlock
                                  failureBlock:(BAResponseFailBlock)failureBlock
                                 progressBlock:(BADownloadProgressBlock)progressBlock;

/**
 网络请求的实例方法 post

 @param entity 请求信息载体
 @param successBlock 请求成功的回调
 @param failureBlock 请求失败的回调
 @param progressBlock 进度
 @return BAURLSessionTask
 */
+ (BAURLSessionTask *)ba_request_POSTWithEntity:(BADataEntity *)entity
                                   successBlock:(BAResponseSuccessBlock)successBlock
                                   failureBlock:(BAResponseFailBlock)failureBlock
                                  progressBlock:(BADownloadProgressBlock)progressBlock;

/**
 网络请求的实例方法 put
 
 @param entity 请求信息载体
 @param successBlock 请求成功的回调
 @param failureBlock 请求失败的回调
 @param progressBlock 进度
 @return BAURLSessionTask
 */
+ (BAURLSessionTask *)ba_request_PUTWithEntity:(BADataEntity *)entity
                                  successBlock:(BAResponseSuccessBlock)successBlock
                                  failureBlock:(BAResponseFailBlock)failureBlock
                                 progressBlock:(BADownloadProgressBlock)progressBlock;

/**
 网络请求的实例方法 delete
 
 @param entity 请求信息载体
 @param successBlock 请求成功的回调
 @param failureBlock 请求失败的回调
 @param progressBlock 进度
 @return BAURLSessionTask
 */
+ (BAURLSessionTask *)ba_request_DELETEWithEntity:(BADataEntity *)entity
                                     successBlock:(BAResponseSuccessBlock)successBlock
                                     failureBlock:(BAResponseFailBlock)failureBlock
                                    progressBlock:(BADownloadProgressBlock)progressBlock;

/**
 上传图片(多图)
 
 @param entity 请求信息载体
 @param successBlock 上传成功的回调
 @param failureBlock 上传失败的回调
 @param progressBlock 上传进度
 @return BAURLSessionTask
 */
+ (BAURLSessionTask *)ba_uploadImageWithEntity:(BADataEntity *)entity
                                  successBlock:(BAResponseSuccessBlock)successBlock
                                   failurBlock:(BAResponseFailBlock)failureBlock
                                 progressBlock:(BAUploadProgressBlock)progressBlock;

/**
 视频上传
 
 @param entity 请求信息载体
 @param successBlock 成功的回调
 @param failureBlock 失败的回调
 @param progressBlock 上传的进度
 */
+ (void)ba_uploadVideoWithEntity:(BADataEntity *)entity
                    successBlock:(BAResponseSuccessBlock)successBlock
                    failureBlock:(BAResponseFailBlock)failureBlock
                   progressBlock:(BAUploadProgressBlock)progressBlock;

/**
 文件下载
 
 @param entity 请求信息载体
 @param successBlock 下载文件成功的回调
 @param failureBlock 下载文件失败的回调
 @param progressBlock 下载文件的进度显示
 @return BAURLSessionTask
 */
+ (BAURLSessionTask *)ba_downLoadFileWithEntity:(BADataEntity *)entity
                                   successBlock:(BAResponseSuccessBlock)successBlock
                                   failureBlock:(BAResponseFailBlock)failureBlock
                                  progressBlock:(BADownloadProgressBlock)progressBlock;

/**
 文件上传
 
 @param entity 请求信息载体
 @param successBlock successBlock description
 @param failureBlock failureBlock description
 @param progressBlock progressBlock description
 @return BAURLSessionTask
 */
+ (BAURLSessionTask *)ba_uploadFileWithWithEntity:(BADataEntity *)entity
                                     successBlock:(BAResponseSuccessBlock)successBlock
                                     failureBlock:(BAResponseFailBlock)failureBlock
                                    progressBlock:(BAUploadProgressBlock)progressBlock;


#pragma mark - 网络状态监测
/*!
 *  开启实时网络状态监测,通过Block回调实时获取(此方法可多次调用)
 */
+ (void)ba_startNetWorkMonitoringWithBlock:(BANetworkStatusBlock)networkStatus;

#pragma mark - 自定义请求头
/**
 *  自定义请求头
 */
+ (void)ba_setValue:(NSString *)value forHTTPHeaderKey:(NSString *)HTTPHeaderKey;

/**
 删除所有请求头
 */
+ (void)ba_clearAuthorizationHeader;

#pragma mark - 取消 Http 请求
/*!
 *  取消所有 Http 请求
 */
+ (void)ba_cancelAllRequest;

/*!
 *  取消指定 URL 的 Http 请求
 */
+ (void)ba_cancelRequestWithURL:(NSString *)URL;

/**
 清空缓存:此方法可能会阻止调用线程,直到文件删除完成。
 */
- (void)ba_clearAllHttpCache;

@end

demo 示例

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.title = @"BANetManager";
    
    /*! 网络状态实时监测可以使用 block 回调,也可以使用单独方法判断 */
    [self ba_netType];
    
}

#pragma mark - 网络类型判断
- (void)ba_netType
{
//    BAWeak;
    [BANetManager ba_startNetWorkMonitoringWithBlock:^(BANetworkStatus status) {
        NSString *msg;
        switch (status) {
            case 0:
            {
                msg = @"未知网络";
                BAKit_ShowAlertWithMsg(msg);
            }
                break;
            case 1:
            {
                msg = @"没有网络";
                BAKit_ShowAlertWithMsg(msg);
            }
                break;
            case 2:
            {
                msg = @"您的网络类型为:手机 3G/4G 网络";
                BAKit_ShowAlertWithMsg(msg);
            }
                break;
            case 3:
            {
                msg = @"您的网络类型为:wifi 网络";
                /*! wifi 网络下请求网络:可以在父类写此方法,具体使用demo,详见:https://github.com/boai/BABaseProject */
                BAKit_ShowAlertWithMsg(msg);
            }
                break;
                
            default:
                break;
        }
    }];
}

#pragma mark - get
- (IBAction)getData:(UIButton *)sender
{
    // 如果打印数据不完整,是因为 Xcode 8 版本问题,请下断点打印数据
    BADataEntity *entity = [BADataEntity new];
    entity.urlString = url5;
    entity.needCache = YES;
    [BANetManager ba_request_GETWithEntity:entity successBlock:^(id response) {
        NSLog(@"get 请求数据结果: *** %@", response);
        NSString *msg = [NSString stringWithFormat:@"get 请求数据结果:%@", response];
        BAKit_ShowAlertWithMsg(msg);
    } failureBlock:^(NSError *error) {
        
    } progressBlock:nil];
}

#pragma mark - post
- (IBAction)postData:(UIButton *)sender
{
    [sender setTitle:@"post" forState:UIControlStateNormal];
    // 自定义超时设置
    BANetManagerShare.timeoutInterval = 15;
    
    // 自定义添加请求头
//    NSDictionary *headerDict = @{@"Accept":@"application/json", @"Accept-Encoding":@"gzip", @"charset":@"utf-8"};
//    BANetManagerShare.httpHeaderFieldDictionary = headerDict;
    
    // 自定义更改 requestSerializer
//        BANetManagerShare.requestSerializer = BAHttpRequestSerializerHTTP;
    // 自定义更改 responseSerializer
//        BANetManagerShare.responseSerializer = BAHttpRequestSerializerHTTP;
    
    // 清楚当前所有请求头
//    [BANetManager ba_clearAuthorizationHeader];
    
    
//    NSString *url = @"http://115.29.201.135/mobile/mobileapi.php";
//    NSString *parameters = @"sAp3OxNlYMZZa7OlRi2TwguoTtwNwwFwOo5k8LL3ERtcTbAvGPhZ5yUWiiIJeXx2WjYlnMU1nFOoi2JSKJDINW62lcM9DB9XDdZQACnY60g=";
//    int page = 1;
    NSDictionary *parameters = @{
                           @"txtusername":@"13651789999",
                           @"txtpassword":@"123456"
                           };
//    NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:@(page).stringValue, @"page", @"10", @"per_page", nil];;
    
    BADataEntity *entity = [BADataEntity new];
    entity.urlString = url6;
    entity.needCache = NO;
    entity.parameters = parameters;
    
    // 如果打印数据不完整,是因为 Xcode 8 版本问题,请下断点打印数据
    [BANetManager ba_request_POSTWithEntity:entity successBlock:^(id response) {
        NSLog(@"post 请求数据结果: *** %@", response);
        self.uploadLabel.text = @"上传完成";
        [sender setTitle:@"上传完成" forState:UIControlStateNormal];
    } failureBlock:^(NSError *error) {
        
    } progressBlock:^(int64_t bytesProgress, int64_t totalBytesProgress) {
        /*! 封装方法里已经回到主线程,所有这里不用再调主线程了 */
        self.uploadLabel.text = [NSString stringWithFormat:@"上传进度:%.2lld%%",100 * bytesProgress/totalBytesProgress];
        [sender setTitle:@"上传中..." forState:UIControlStateNormal];
    }];
}

#pragma mark - 下载视频、图片
- (IBAction)downloadData:(UIButton *)sender
{
    UIButton *downloadBtn = (UIButton *)sender;
    NSString *path1 = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"/Documents/半塘.mp4"]];
    //    NSString *path2 = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"/Documents/image123.mp3"]];
    
    NSLog(@"路径:%@", path1);
    
    /*! 查找路径中是否存在"半塘.mp4",是,返回真;否,返回假。 */
    //    BOOL result2 = [path1 hasSuffix:@"半塘.mp4"];
    //    NSLog(@"%d", result2);
    
    /*!
     下载前先判断该用户是否已经下载,目前用了两种方式:
     1、第一次下载完用变量保存,
     2、查找路径中是否包含改文件的名字
     如果下载完了,就不要再让用户下载,也可以添加alert的代理方法,增加用户的选择!
     */
    //    if (isFinishDownload || result2)
    //    {
    //        [[[UIAlertView alloc] initWithTitle:@"温馨提示:" message:@"您已经下载该视频!" delegate:nil cancelButtonTitle:@"确 定" otherButtonTitles:nil, nil] show];
    //        return;
    //    }
//    BAWeak;
    
    BAFileDataEntity *fileEntity = [BAFileDataEntity new];
    fileEntity.urlString = @"http://static.yizhibo.com/pc_live/static/video.swf?onPlay=YZB.play&onPause=YZB.pause&onSeek=YZB.seek&scid=pALRs7JBtTRU9TWy";
    fileEntity.filePath = path1;
    
    [BANetManager ba_downLoadFileWithEntity:fileEntity successBlock:^(id response) {
        NSLog(@"下载完成,路径为:%@", response);
        self.downloadLabel.text = @"下载完成";
        isFinishDownload = YES;
        [downloadBtn setTitle:@"下载完成" forState:UIControlStateNormal];
        [downloadBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
        BAKit_ShowAlertWithMsg(@"视频下载完成!");
    } failureBlock:^(NSError *error) {
        
    } progressBlock:^(int64_t bytesProgress, int64_t totalBytesProgress) {
        /*! 封装方法里已经回到主线程,所有这里不用再调主线程了 */
        self.downloadLabel.text = [NSString stringWithFormat:@"下载进度:%.2lld%%",100 * bytesProgress/totalBytesProgress];
        [downloadBtn setTitle:@"下载中..." forState:UIControlStateNormal];
    }];
}

#pragma mark - 上传图片
- (IBAction)uploadImageData:(UIButton *)sender
{
    /*!
     
     1、此上传图片单张、多图上传都经过几十个项目亲测可用,大家可以放心使用,使用过程中有问题,请加群:479663605 进行反馈,多谢!
     2、注意:如果使用PHP后台,后台不会对接此接口的话,博爱已经为你们量身定做了PHP后台接口,你们只需要把文件夹中的 postdynamic.php 文件发送给你们的PHP后台同事,他们就知道了,里面都有详细说明!
     */
    
    BAImageDataEntity *imageEntity = [BAImageDataEntity new];
    
    [BANetManager ba_uploadImageWithEntity:imageEntity successBlock:^(id response) {
        
    } failurBlock:^(NSError *error) {
        
    } progressBlock:^(int64_t bytesProgress, int64_t totalBytesProgress) {
        
    }];
}

#pragma mark - 上传视频
- (IBAction)uploadVideoData:(UIButton *)sender
{
    /*!
     
     1、此上传视频都经过几十个项目亲测可用,大家可以放心使用,使用过程中有问题,请加群:479663605 进行反馈,多谢!
     2、此处只需要传URL 和 parameters就行了,具体压缩方法都已经做好处理!
     
     */
    BAFileDataEntity *videoEntity = [BAFileDataEntity new];
    
    [BANetManager ba_uploadVideoWithEntity:videoEntity successBlock:^(id response) {
        
    } failureBlock:^(NSError *error) {
        
    } progressBlock:^(int64_t bytesProgress, int64_t totalBytesProgress) {
        
    }];
}

#pragma mark - put 请求
- (IBAction)putData:(UIButton *)sender
{
    NSDictionary *dict = @{@"EquipmentType":@"iPhone", @"EquipmentGUID":@"b61df00d-87db-426f-bc5a-bc8fffa907db"};
    BADataEntity *entity = [BADataEntity new];
    entity.urlString = @"http://120.76.245.240:8080/bda/resetPassword/[email protected]&password=q&OTP=634613";
    entity.parameters = dict;
    
    [BANetManager ba_request_PUTWithEntity:entity successBlock:^(id response) {
        NSLog(@"*********00000 : %@", response);
    } failureBlock:^(NSError *error) {
        
    } progressBlock:nil];
}

#pragma mark - delete 请求
- (IBAction)deleteData:(UIButton *)sender
{
    BADataEntity *entity = [BADataEntity new];
    [BANetManager ba_request_DELETEWithEntity:entity successBlock:nil failureBlock:nil progressBlock:nil];
}

#pragma mark - 上传文件
- (IBAction)uploadFileButtonAction:(UIButton *)sender
{
    BAFileDataEntity *fileEntity = [BAFileDataEntity new];
    [BANetManager ba_uploadFileWithWithEntity:fileEntity successBlock:^(id response) {
        
    } failureBlock:^(NSError *error) {
        
    } progressBlock:^(int64_t bytesProgress, int64_t totalBytesProgress) {
        
    }];
}

其他示例可下载 demo 查看源码!

5、更新记录:【倒叙】

欢迎使用 【BAHome】 系列开源代码 ! 如有更多需求,请前往:【https://github.com/BAHome】

最新更新时间:2018-05-22 【倒叙】
最新Version:【Version:2.3.10】
更新内容:
2.3.10.1、新增 属性【isOpenLog】(注意:是否开启 log 打印,默认不开启) 2.3.10.2、优化部分代码

最新更新时间:2018-04-16 【倒叙】
最新Version:【Version:2.3.9】
更新内容:
2.3.9.1、新增 isSetQueryStringSerialization 配置参数,可以将传入 的 string 参数序列化,使用方式:BANetManagerShare.isSetQueryStringSerialization = YES,详见【BANetManager.h】文件;
2.3.9.1、修复 【BANetManagerCache.m】文件中,【+ (NSString *)ba_cacheWithUrlString:(NSString *)urlString parameters:(NSDictionary *)parameters】方法中 parameters 增加了字典的容错判断。

最新更新时间:2017-11-20 【倒叙】
最新Version:【Version:2.3.8】
更新内容:
2.3.8.1、【方法替换】原传参方式为 id 类型,现在统一改为 BADataEntity 类型,具体参考 BADataEntity 类,如果更新发现较多错误,敬请谅解,可以恢复至上一版本【Version:2.3.6】,感谢@北京-晋登科 大神 的亲自操刀改版!
2.3.8.2、【方法替换】原图像上传方法传参 精简为 BADataEntity 类下的 BAImageDataEntity 类,具体参考 BAImageDataEntity 类,如果更新发现较多错误,敬请谅解,可以恢复至上一版本【Version:2.3.6】
2.3.8.3、【方法替换】原文件上传、下载方法传参 精简为 BADataEntity 类下的 BAFileDataEntity 类,具体参考 BAFileDataEntity 类,如果更新发现较多错误,敬请谅解,可以恢复至上一版本【Version:2.3.6】
2.3.8.4、【新增文件】新增 BAParameterEntity 文件夹,主要处理所有上传所需的参数等信息
2.3.8.4、【新增文件】新增 BANetManager_Version.h 文件,主要处理所有版本更新内容等信息

最新更新时间:2017-09-09 【倒叙】
最新Version:【Version:2.3.6】
更新内容:
2.3.6.1、更换 传参 类型为 id 类型,传参更自由!

最新更新时间:2017-08-18 【倒叙】
最新Version:【Version:2.3.5】
更新内容:
2.3.5.1、新增 删除所有缓存的方法,可以自由删除当前的所有缓存!

最新更新时间:2017-08-17 【倒叙】
最新Version:【Version:2.3.4】
更新内容:
2.3.4.1、控制台打印 debug 状态下显示中文
2.3.4.2、移除默认 requestSerializer 和 responseSerializer
2.3.4.3、新增 post 请求的进度提示
2.3.4.4、新增 默认请求头:@"application/x-www-form-urlencoded"
2.3.4.5、优化部分代码规范,给大家带来的不变,敬请谅解!

最新更新时间:2017-07-18 【倒叙】
最新Version:【Version:2.3.3】
更新内容:
2.3.3.1、新增 清除 请求头
2.3.3.2、新增 文件上传
2.3.3.3、优化多图上传

最新更新时间:2017-05-03 【倒叙】
最新Version:【Version:2.2.2】
更新内容:
2.2.1、优化方法名命名规范
2.2.2、优化网络状态实时监测 block 回调,去除多余设置,需要网络判断,直接调用block回调即可
2.2.3、新增 YYCache 缓存处理
2.2.4、新增自定义:超时设置
2.2.5、新增自定义:requestSerializer设置
2.2.6、新增自定义:responseSerializer设置
2.2.7、新增自定义:请求头设置
2.2.8、新增自定义 CA 证书 和 HTTPS 请求配置,只需把证书导入项目目录即可,无需设置
2.2.9、新增史上最全的 AFN 请求 NSLog 打印,详见 demo 控制台打印结果
2.2.10、新增 DEBUG 模式下的 NSLog 判断,release 下不会打印,请放心使用
2.2.11、如果打印数据不完整,是因为 Xcode 8 版本问题,请下断点打印数据
2.2.12、由于新版本改动较大,原有方法命名可能有所改动,希望老用户见谅!
2.2.13、目前版本较稳定,稍后奉上 pod 版本!请大家耐心等待

最新更新时间:2016-11-24 【倒叙】
最新Version:【Version:2.1】
更新内容:
2.1.1、优化方法名命名规范
2.1.2、新增网络状态实时监测 block 回调,新增单独网络监测 bool 返回,详见 demo
2.1.3、新增旧方法更新提示
2.1.4、优化各种注释

最新更新时间:2016-11-17
最新Version:【Version:2.0】
更新内容:
2.0.1、优化方法名命名规范
2.0.2、新增部分注释
2.0.3、视频上传方法对接,目前有很多项目对接成功

6、bug 反馈

1、开发中遇到 bug,希望小伙伴儿们能够及时反馈与我们 BAHome 团队,我们必定会认真对待每一个问题!

2、以后提需求和 bug 的同学,记得把 git 或者博客链接给我们,我直接超链到你们那里!希望大家积极参与测试!

7、BAHome 团队成员

1、QQ 群 479663605
【注意:此群为 2 元 付费群,介意的小伙伴儿勿扰!】

孙博岩
QQ:137361770
git:https://github.com/boai
简书:http://www.jianshu.com/u/95c9800fdf47
微博:

马景丽
QQ:1253540493
git:https://github.com/MaJingli

陆晓峰
QQ:442171865
git:https://github.com/zeR0Lu

陈集
QQ:3161182978
git:https://github.com/chenjipdc
简书:http://www.jianshu.com/u/90ae559fc21d

任子丰
QQ:459643690
git:https://github.com/renzifeng

吴丰收
QQ:498121294

石少庸
QQ:363605775
git:https://github.com/CrazyCoderShi
简书:http://www.jianshu.com/u/0726f4d689a3

8、开发环境 和 支持版本

开发使用 最新版本 Xcode,理论上支持 iOS 9 及以上版本,如有版本适配问题,请及时反馈!多谢合作!

9、感谢

感谢 BAHome 团队成员倾力合作,后期会推出一系列 常用 UI 控件的封装,大家有需求得也可以在 issue 提出,如果合理,我们会尽快推出新版本!

BAHome 的发展离不开小伙伴儿的信任与推广,再次感谢各位小伙伴儿的支持!

banetmanager's People

Contributors

boai avatar w819314930 avatar zer0lu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

banetmanager's Issues

提供相关JAVA上传附件代码

可上传图片,视频及其他文件,支付多个上传。
FileController.java

@PostMapping("/uploadFile")
    public R uploadFile(HttpServletRequest request){
        UploadFileResponse uploadFileResponse = null;
        // 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
                request.getSession().getServletContext());
        // 检查form中是否有enctype="multipart/form-data"
        if (multipartResolver.isMultipart(request)) {
            // 将request变成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
            // 获取multiRequest 中所有的文件名
            Iterator iter = multiRequest.getFileNames();

            while (iter.hasNext()) {
                // 一次遍历所有文件
                MultipartFile file = multiRequest.getFile(iter.next()
                        .toString());
                //传递参数值
//                String str = multiRequest.getParameter("str");
//                System.out.println("str:" + str);
                if (Objects.nonNull(file)) {
                    uploadFileResponse = fileService.storeSingleFile(file);
                }

            }

        }

        return R.OK().setData(uploadFileResponse);
    }

FileService.java

 * 存储文件到系统
     *
     * @param file 文件
     * @return 文件名
     */
    public UploadFileResponse storeSingleFile(MultipartFile file) {
        String extension = FilenameUtils.getExtension(file.getOriginalFilename());
        String fileName = FilenameUtils.getName(file.getOriginalFilename());

        if(fileName.contains("..")) {
            throw new FileException("Sorry! Filename contains invalid path sequence " + fileName);
        }
        try {
            Path targetLocation = this.fileStorageLocation.resolve(fileName);
            Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
            return new UploadFileResponse(file.getName(),fileName,extension,file.getSize());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

上传视频时的问题

获得视频沙盒路径使用BAFileDataEntity 上传时,[avAssetExport status] 的状态不是AVAssetExportSessionStatusCompleted 直接走了default 并且控制台只打印了一个
NSURLConnection finished with error - code -1002 就结束了
这是啥原因呢?

protobuf

什么时候可以添加一下 对 protobuf 的支持就好了

请求头

请问下我有些请求需要设置请求头,有些请求不需要设置请求头,这个应该怎么处理呢

使用ba_request_POSTWithEntity请求以后抓包发现发送的是GET请求

使用ba_request_POSTWithEntity请求以后,用charles抓包发现发送的是GET请求。
代码如下:

BADataEntity *entity = [BADataEntity new];
entity.urlString ="/exmaple/123";

BlockSelf;
[BANetManager ba_request_POSTWithEntity:entity successBlock:^(id response) {

} failureBlock:^(NSError *error) {
    
} progressBlock:^(int64_t bytesProgress, int64_t totalBytesProgress) {
    
}];

POST请求后台始终无法识别参数

举个例子,我通过url传一个电话号码,但是后台返回给我始终是恶意请求(只有没有传参数的情况下才会返回这个)我试了另外一个框架同样的链接和参数就没这个问题,很奇怪啊,难道要给后台看那个php文件?

put请求返回400错误

这个传的参数要求是json格式的。但是框架里是dic。应该和post请求一样是处理过的,但是还是错误?

缓存问题

移除缓存的时候,能不能根据URL和parameters来移除缓存,而不是一次性移除?

设置请求头的问题

snip20181130_1

  • 我这种方式设置请求头,貌似并没有设置成功, 错误信息一直是
    error = Unauthorized;
    message = "Full authentication is required to access this resource";
    path = "/oauth/token";
    status = 401;
    timestamp = "2018-11-30 10:12:16";
  • 用postman请求是这样的
    snip20181130_3

能不能增加播放器功能

感谢大神分享代码,个人感觉既然有了视频上传和下载还是需要有个播放器的功能最好做下转码之类的功能.

缓存

缓存 能否优化一下 添加只缓存到内存中 或添加 缓存的时长 属性

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.