Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified T8NetworkKitDemo/.DS_Store
Binary file not shown.
Binary file modified T8NetworkKitDemo/Pods/.DS_Store
Binary file not shown.
91 changes: 41 additions & 50 deletions T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,12 @@
//

#import <Foundation/Foundation.h>
@class T8NetworkError;

typedef NS_ENUM(NSInteger, RequestStatus)
{
RequestStatusSuccess,
RequestStatusFailure
};

typedef NS_ENUM(NSInteger, HttpMethod) {
HttpMethodGet,
HttpMethodPost,
HttpMethodPut,
HttpMethodDelete,
HttpMethodPatch,
HttpMethodHead
};
#import "T8NetworkPrivate.h"
#import "T8NetworkError.h"

@class T8NetworkError;
@class T8FileModel;
@class T8FileModelArray;

typedef NS_ENUM(NSInteger, FileModelType) {
FileModelData,
Expand All @@ -32,50 +21,21 @@ typedef NS_ENUM(NSInteger, FileModelType) {


typedef void(^RequestComplete)(RequestStatus status, NSDictionary *data, T8NetworkError *error);
typedef void(^RequestHeaderBlock)(NSMutableURLRequest *request);
typedef void(^RequestProgressBlock)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite);

/**
* 文件模型
*/
@interface T8FileModel : NSObject
@property (nonatomic, assign) FileModelType type;
@property (nonatomic, copy) NSString *path;
@property (nonatomic, strong) NSData *data;
@property (nonatomic, copy) NSString *fileName;
@property (nonatomic, copy) NSString *mimeType;
@end

/**
* 文件模型数据
*/
@interface T8FileModelArray : NSObject
@property (nonatomic, strong) NSArray *fileModelArray;

@end


@interface T8NetworkBaseService : NSObject

/**
* 设置URL
*/
+ (void)setBaseUrl:(NSString *)baseUrl;

/**
* 设置header参数
*/
+ (void)setHeaderBlock:(RequestHeaderBlock)headerBlock;
+ (T8NetworkBaseService *)shrareInstance;

/**
* 根据HTTP方法获取数据
* 根据HTTP方法(GET, POST, DELETE, PUT, PATCH, DELETE)获取数据
*
* @param strUrlPath 接口的地址
* @param httpMethod HTTP方法
* @param dictParams 参数
* @param completeBlock 回调方法
*/
+ (void)sendRequestUrlPath:(NSString *)strUrlPath httpMethod:(HttpMethod)httpMethod dictParams:(NSMutableDictionary *)dictParams completeBlock:(RequestComplete)completeBlock;
- (void)sendRequestUrlPath:(NSString *)strUrlPath httpMethod:(HttpMethod)httpMethod dictParams:(NSMutableDictionary *)dictParams completeBlock:(RequestComplete)completeBlock;
/**
* 上传单个文件
*
Expand All @@ -85,7 +45,7 @@ typedef void(^RequestProgressBlock)(NSUInteger bytesWritten, long long totalByte
* @param progressBlock 上传进度回调方法
* @param completBlock 上传成功回调方法
*/
+ (void)uploadFile:(T8FileModel *)fileModel urlPath:(NSString *)strUrlPath params:(NSMutableDictionary *)params progressBlock:(RequestProgressBlock)progressBlock completBlock:(RequestComplete)completBlock;
- (void)uploadFile:(T8FileModel *)fileModel urlPath:(NSString *)strUrlPath params:(NSMutableDictionary *)params progressBlock:(RequestProgressBlock)progressBlock completeBlock:(RequestComplete)completeBlock;

/**
* 上传一组文件
Expand All @@ -96,7 +56,38 @@ typedef void(^RequestProgressBlock)(NSUInteger bytesWritten, long long totalByte
* @param progressBlock 上传进度回调方法
* @param completBlock 上传完成回调方法
*/
+ (void)uploadFiles:(T8FileModelArray *)files urlPath:(NSString *)strUrlPath params:(NSMutableDictionary *)params progressBlock:(RequestProgressBlock)progressBlock completBlock:(RequestComplete)completBlock;
- (void)uploadFiles:(T8FileModelArray *)files urlPath:(NSString *)strUrlPath params:(NSMutableDictionary *)params progressBlock:(RequestProgressBlock)progressBlock completeBlock:(RequestComplete)completeBlock;

@end


/**
* 文件模型
*/
@interface T8FileModel : NSObject

@property (nonatomic, assign) FileModelType type;

@property (nonatomic, copy) NSString *path;

@property (nonatomic, strong) NSData *data;

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *fileName;

@property (nonatomic, copy) NSString *mimeType;

@end


/**
* 文件模型数组
*/
@interface T8FileModelArray : NSObject
@property (nonatomic, strong) NSArray<T8FileModel *> *fileModelArray;

@end



159 changes: 59 additions & 100 deletions T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.m
Original file line number Diff line number Diff line change
Expand Up @@ -8,47 +8,56 @@

#import "T8NetworkBaseService.h"
#import "AFNetworking.h"
#import "T8NetworkError.h"
static NSString *T8BaseNetworkUrl = nil;
static RequestHeaderBlock T8RequestHeaderBlock = nil;
#import "T8NetworkConifig.h"

@implementation T8NetworkBaseService
@implementation T8NetworkBaseService{
T8NetworkConifig *_config;
AFHTTPSessionManager *_manager;
}

+ (void)setBaseUrl:(NSString *)baseUrl
+ (T8NetworkBaseService *)shrareInstance
{
T8BaseNetworkUrl = baseUrl;
static id sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}

+ (void)setHeaderBlock:(RequestHeaderBlock)headerBlock
{
T8RequestHeaderBlock = headerBlock;
- (id)init {
self = [super init];
if (self) {
_config = [T8NetworkConifig sharedInstance];
_manager = [self shareHttpManager];
}
return self;
}

+ (AFHTTPSessionManager *)shareHttpManager
- (AFHTTPSessionManager *)shareHttpManager
{
static AFHTTPSessionManager *_manager = nil;
static AFHTTPSessionManager *manager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
_manager.responseSerializer = [AFJSONResponseSerializer serializer];
_manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain", nil];
manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain", nil];
});
return _manager;
return manager;
}

+ (void)sendRequestUrlPath:(NSString *)strUrlPath httpMethod:(HttpMethod)httpMethod dictParams:(NSMutableDictionary *)dictParams completeBlock:(RequestComplete)completeBlock
- (void)sendRequestUrlPath:(NSString *)strUrlPath httpMethod:(HttpMethod)httpMethod dictParams:(NSMutableDictionary *)dictParams completeBlock:(RequestComplete)completeBlock
{
AFHTTPSessionManager *manager = [self shareHttpManager];

NSString *method = [self getMethodTypeString:httpMethod];
NSString *urlStr = [self getRequestUrl:strUrlPath];
NSLog(@"%@", urlStr);
NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:method URLString:urlStr parameters:dictParams error:nil];
if (T8RequestHeaderBlock) {
T8RequestHeaderBlock(request);
NSString *method = [T8NetworkPrivate getMethodTypeString:httpMethod];
NSString *requestUrl = [T8NetworkPrivate buildRequestUrl:_config.baseUrl detailUrl:strUrlPath];

NSMutableURLRequest *request = [_manager.requestSerializer requestWithMethod:method URLString:requestUrl parameters:dictParams error:nil];
if (_config.headerBlock) {
_config.headerBlock(request);
}

NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
NSURLSessionDataTask *dataTask = [_manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
T8NetworkError *_error = [T8NetworkError errorWithNSError:error];
completeBlock(RequestStatusFailure, nil, _error);
Expand All @@ -59,127 +68,77 @@ + (void)sendRequestUrlPath:(NSString *)strUrlPath httpMethod:(HttpMethod)httpMet
[dataTask resume];
}

+ (void)uploadFile:(T8FileModel *)fileModel urlPath:(NSString *)urlPath params:(NSMutableDictionary *)params progressBlock:(RequestProgressBlock)progressBlock completBlock:(RequestComplete)completBlock
- (void)uploadFile:(T8FileModel *)fileModel urlPath:(NSString *)urlPath params:(NSMutableDictionary *)params progressBlock:(RequestProgressBlock)progressBlock completeBlock:(RequestComplete)completeBlock
{
AFHTTPSessionManager *manager = [self shareHttpManager];
NSString *urlStr = [self getRequestUrl:urlPath];
NSString *requetUrl = [T8NetworkPrivate buildRequestUrl:_config.baseUrl detailUrl:urlPath];

NSMutableURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[self getRequestUrl:urlStr] parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSMutableURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:requetUrl parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
if (fileModel.type == FileModelData) {
if (fileModel.data) {
[formData appendPartWithFileData:fileModel.data name:@"" fileName:@"" mimeType:fileModel.mimeType];
[formData appendPartWithFileData:fileModel.data name:fileModel.name fileName:fileModel.fileName mimeType:fileModel.mimeType];
}
}else if (fileModel.type == FileModelPath){
if (fileModel.path.length > 0) {
[formData appendPartWithFileURL:[NSURL URLWithString:fileModel.path] name:@"" fileName:@"" mimeType:fileModel.mimeType error:nil];
[formData appendPartWithFileURL:[NSURL fileURLWithPath:fileModel.path] name:fileModel.name fileName:fileModel.fileName mimeType:fileModel.mimeType error:nil];
NSLog(@"formData = %@", formData);
}
}
} error:nil];

if (T8RequestHeaderBlock) {
T8RequestHeaderBlock(request);
if (_config.headerBlock) {
_config.headerBlock(request);
}

NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {

// typedef void(^RequestProgressBlock)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite);
progressBlock(uploadProgress.completedUnitCount, uploadProgress.totalUnitCount, 0);
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (error) {
NSLog(@"Error: %@", error);
T8NetworkError *_error = [T8NetworkError errorWithNSError:error];
completeBlock(RequestStatusFailure, nil, _error);
} else {
NSLog(@"%@ %@", response, responseObject);
completeBlock(RequestStatusSuccess, responseObject, nil);
}
}];
[uploadTask resume];
}



+ (void)uploadFiles:(T8FileModelArray *)files urlPath:(NSString *)urlPath params:(NSMutableDictionary *)params progressBlock:(RequestProgressBlock)progressBlock completBlock:(RequestComplete)completBlock;
- (void)uploadFiles:(T8FileModelArray *)files urlPath:(NSString *)urlPath params:(NSMutableDictionary *)params progressBlock:(RequestProgressBlock)progressBlock completeBlock:(RequestComplete)completeBlock;
{
NSString *requestUrl = [T8NetworkPrivate buildRequestUrl:_config.baseUrl detailUrl:urlPath];
NSArray *fileModelArray = files.fileModelArray;

AFHTTPSessionManager *manager = [self shareHttpManager];
NSString *urlStr = [self getRequestUrl:urlPath];

NSMutableURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[self getRequestUrl:urlStr] parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSMutableURLRequest *request = [_manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:requestUrl parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
for (T8FileModel *fileModel in fileModelArray) {
if (fileModel.type == FileModelData) {
if (fileModel.data) {
[formData appendPartWithFileData:fileModel.data name:@"" fileName:@"" mimeType:fileModel.mimeType];
[formData appendPartWithFileData:fileModel.data name:fileModel.name fileName:fileModel.fileName mimeType:fileModel.mimeType];
}
}else if (fileModel.type == FileModelPath){
if (fileModel.path.length > 0) {
[formData appendPartWithFileURL:[NSURL URLWithString:fileModel.path] name:@"" fileName:@"" mimeType:fileModel.mimeType error:nil];
[formData appendPartWithFileURL:[NSURL fileURLWithPath:fileModel.path] name:fileModel.name fileName:fileModel.fileName mimeType:fileModel.mimeType error:nil];
}
}
}
} error:nil];

if (T8RequestHeaderBlock) {
T8RequestHeaderBlock(request);
if (_config.headerBlock) {
_config.headerBlock(request);
}

NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {

NSURLSessionUploadTask *uploadTask = [_manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {
progressBlock(uploadProgress.completedUnitCount, uploadProgress.totalUnitCount, 0);
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (error) {
NSLog(@"Error: %@", error);
T8NetworkError *_error = [T8NetworkError errorWithNSError:error];
completeBlock(RequestStatusFailure, nil, _error);
} else {
NSLog(@"%@ %@", response, responseObject);
completeBlock(RequestStatusSuccess, responseObject, nil);
}
}];
[uploadTask resume];
}

#pragma mark Private

/**
* HTTP方法:枚举->字符串
*/
+ (NSString *)getMethodTypeString:(HttpMethod)httpMethod{
NSString *method = nil;
switch(httpMethod) {
case HttpMethodGet:
method = @"GET";
break;
case HttpMethodPost:
method = @"POST";
break;
case HttpMethodPut:
method = @"PUT";
break;
case HttpMethodDelete:
method = @"DELETE";
break;
case HttpMethodPatch:
method = @"PATCH";
break;
case HttpMethodHead:
method = @"HEAD";
break;
default:
break;
}
return method;
}

/**
* 拼接URL:baseURL+服务路径
*/
+ (NSString *)getRequestUrl:(NSString *)path
{
if ([path hasPrefix:@"http"]) {
return path;
}

if (T8BaseNetworkUrl.length>0) {
return [NSString stringWithFormat:@"%@/%@", T8BaseNetworkUrl, path];
}else{
return path;
}
}


@end

@implementation T8FileModel
Expand Down
Loading