diff --git a/T8NetworkKitDemo/.DS_Store b/T8NetworkKitDemo/.DS_Store index caec353..68df62f 100644 Binary files a/T8NetworkKitDemo/.DS_Store and b/T8NetworkKitDemo/.DS_Store differ diff --git a/T8NetworkKitDemo/Pods/.DS_Store b/T8NetworkKitDemo/Pods/.DS_Store index 1e63807..d42705a 100644 Binary files a/T8NetworkKitDemo/Pods/.DS_Store and b/T8NetworkKitDemo/Pods/.DS_Store differ diff --git a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.h b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.h index 61f9afc..9c8256b 100644 --- a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.h +++ b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.h @@ -7,23 +7,12 @@ // #import -@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, @@ -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; /** * 上传单个文件 * @@ -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; /** * 上传一组文件 @@ -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 *fileModelArray; + +@end + + + diff --git a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.m b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.m index 96de870..9859963 100644 --- a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.m +++ b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkBaseService.m @@ -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); @@ -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 formData) { + NSMutableURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:requetUrl parameters:params constructingBodyWithBlock:^(id 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 formData) { + NSMutableURLRequest *request = [_manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:requestUrl parameters:params constructingBodyWithBlock:^(id 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 diff --git a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkConifig.h b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkConifig.h new file mode 100644 index 0000000..89f6718 --- /dev/null +++ b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkConifig.h @@ -0,0 +1,36 @@ +// +// T8NetworkConifig.h +// T8NetworkKitDemo +// +// Created by Ryeagler on 16/3/22. +// Copyright © 2016年 Ryeagle. All rights reserved. +// + +#import + + +typedef void(^RequestHeaderBlock)(NSMutableURLRequest *request); + +@protocol T8UrlFilterProtocol +- (NSString *)filterUrl:(NSString *)originUrl withRequest:(NSMutableURLRequest *)request; +@end + + +@interface T8NetworkConifig : NSObject + ++ (T8NetworkConifig *)sharedInstance; + +@property (nonatomic, copy) NSString *baseUrl; + +@property (nonatomic, copy) RequestHeaderBlock headerBlock; + +@property (strong, nonatomic, readonly) NSArray *urlFilters; + +/** + * 设置header参数 + */ +- (void)setHeaderBlock:(RequestHeaderBlock)headerBlock; + +- (void)addUrlFilter:(id)filter; + +@end diff --git a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkConifig.m b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkConifig.m new file mode 100644 index 0000000..e53ecc3 --- /dev/null +++ b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkConifig.m @@ -0,0 +1,46 @@ +// +// T8NetworkConifig.m +// T8NetworkKitDemo +// +// Created by Ryeagler on 16/3/22. +// Copyright © 2016年 Ryeagle. All rights reserved. +// + +#import "T8NetworkConifig.h" + +@implementation T8NetworkConifig { + NSMutableArray *_urlFilters; +} + ++ (T8NetworkConifig *)sharedInstance { + static id sharedInstance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[self alloc] init]; + }); + return sharedInstance; +} + +- (id)init { + self = [super init]; + if (self) { + _urlFilters = [NSMutableArray array]; + } + return self; +} + +- (void)setHeaderBlock:(RequestHeaderBlock)headerBlock +{ + _headerBlock = headerBlock; +} + +- (void)addUrlFilter:(id)filter +{ + [_urlFilters addObject:filter]; +} + +- (NSArray *)urlFilters { + return [_urlFilters copy]; +} + +@end diff --git a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkError.h b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkError.h index 1343900..ef38016 100644 --- a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkError.h +++ b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkError.h @@ -8,6 +8,12 @@ #import +typedef NS_ENUM(NSInteger, RequestStatus) +{ + RequestStatusSuccess, + RequestStatusFailure +}; + @interface T8NetworkError : NSError /** * 返回由NSError构建的错误对象. diff --git a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkPrivate.h b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkPrivate.h new file mode 100644 index 0000000..ee4c6e0 --- /dev/null +++ b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkPrivate.h @@ -0,0 +1,35 @@ +// +// T8NetworkPrivate.h +// T8NetworkKitDemo +// +// Created by Ryeagler on 16/3/23. +// Copyright © 2016年 Ryeagle. All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger, HttpMethod) { + HttpMethodGet, + HttpMethodPost, + HttpMethodPut, + HttpMethodDelete, + HttpMethodPatch, + HttpMethodHead +}; + +@interface T8NetworkPrivate : NSURLRequest +/** + * 为url添加公共参数 + */ ++ (NSString *)urlParametersStringFromParameters:(NSDictionary *)parameters; + +/** + * HTTP方法 枚举->字符 +*/ ++ (NSString *)getMethodTypeString:(HttpMethod)httpMethod; + +/** + * 拼接请求URL + */ ++ (NSString *)buildRequestUrl:(NSString *)baseUrl detailUrl:(NSString *)detailUrl; +@end diff --git a/T8NetworkKitDemo/T8NetWorkKit/T8NetworkPrivate.m b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkPrivate.m new file mode 100644 index 0000000..2fae19f --- /dev/null +++ b/T8NetworkKitDemo/T8NetWorkKit/T8NetworkPrivate.m @@ -0,0 +1,77 @@ +// +// T8NetworkPrivate.m +// T8NetworkKitDemo +// +// Created by Ryeagler on 16/3/23. +// Copyright © 2016年 Ryeagle. All rights reserved. +// + +#import "T8NetworkPrivate.h" + +@implementation T8NetworkPrivate + ++ (NSString *)urlParametersStringFromParameters:(NSDictionary *)parameters { + NSMutableString *urlParametersString = [[NSMutableString alloc] initWithString:@""]; + if (parameters && parameters.count > 0) { + for (NSString *key in parameters) { + NSString *value = parameters[key]; + value = [NSString stringWithFormat:@"%@",value]; + value = [self urlEncode:value]; + [urlParametersString appendFormat:@"&%@=%@", key, value]; + } + } + return urlParametersString; +} + + ++ (NSString*)urlEncode:(NSString*)str { + NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy]; + + NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; + return result; +} + ++ (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; +} + + ++ (NSString *)buildRequestUrl:(NSString *)baseUrl detailUrl:(NSString *)detailUrl +{ + if ([detailUrl hasPrefix:@"http"]) { + return detailUrl; + } + + if (baseUrl.length>0) { + return [NSString stringWithFormat:@"%@/%@", baseUrl, detailUrl]; + }else{ + return detailUrl; + } +} + + + +@end diff --git a/T8NetworkKitDemo/T8NetworkKitDemo.xcodeproj/project.pbxproj b/T8NetworkKitDemo/T8NetworkKitDemo.xcodeproj/project.pbxproj index 1267343..230f91b 100644 --- a/T8NetworkKitDemo/T8NetworkKitDemo.xcodeproj/project.pbxproj +++ b/T8NetworkKitDemo/T8NetworkKitDemo.xcodeproj/project.pbxproj @@ -8,6 +8,9 @@ /* Begin PBXBuildFile section */ 3FB896DB94C8572FB4C92510 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 042B099277402A303BA96B6C /* libPods.a */; }; + 751532DF1CA235A5004233F8 /* T8NetworkPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 751532DE1CA235A5004233F8 /* T8NetworkPrivate.m */; }; + 75DE4EDA1CA01FBA00197A05 /* abc.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 75DE4ED91CA01FBA00197A05 /* abc.jpg */; }; + 75DE4EDD1CA163DD00197A05 /* T8NetworkConifig.m in Sources */ = {isa = PBXBuildFile; fileRef = 75DE4EDC1CA163DD00197A05 /* T8NetworkConifig.m */; }; 75E33AED1C9CF3C600CBD0B8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 75E33AEC1C9CF3C600CBD0B8 /* main.m */; }; 75E33AF01C9CF3C600CBD0B8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 75E33AEF1C9CF3C600CBD0B8 /* AppDelegate.m */; }; 75E33AF31C9CF3C600CBD0B8 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 75E33AF21C9CF3C600CBD0B8 /* ViewController.m */; }; @@ -24,6 +27,11 @@ /* Begin PBXFileReference section */ 042B099277402A303BA96B6C /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 376022D6C7BDBC00C21502E8 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + 751532DD1CA235A5004233F8 /* T8NetworkPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = T8NetworkPrivate.h; sourceTree = ""; }; + 751532DE1CA235A5004233F8 /* T8NetworkPrivate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = T8NetworkPrivate.m; sourceTree = ""; }; + 75DE4ED91CA01FBA00197A05 /* abc.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = abc.jpg; sourceTree = ""; }; + 75DE4EDB1CA163DD00197A05 /* T8NetworkConifig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = T8NetworkConifig.h; sourceTree = ""; }; + 75DE4EDC1CA163DD00197A05 /* T8NetworkConifig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = T8NetworkConifig.m; sourceTree = ""; }; 75E33AE81C9CF3C600CBD0B8 /* T8NetworkKitDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = T8NetworkKitDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 75E33AEC1C9CF3C600CBD0B8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 75E33AEE1C9CF3C600CBD0B8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -95,6 +103,7 @@ 75E33AF71C9CF3C600CBD0B8 /* Assets.xcassets */, 75E33AF91C9CF3C600CBD0B8 /* LaunchScreen.storyboard */, 75E33AFC1C9CF3C600CBD0B8 /* Info.plist */, + 75DE4ED91CA01FBA00197A05 /* abc.jpg */, 75E33AEB1C9CF3C600CBD0B8 /* Supporting Files */, ); path = T8NetworkKitDemo; @@ -111,10 +120,14 @@ 75E33B021C9CF53100CBD0B8 /* T8NetWorkKit */ = { isa = PBXGroup; children = ( + 751532DD1CA235A5004233F8 /* T8NetworkPrivate.h */, + 751532DE1CA235A5004233F8 /* T8NetworkPrivate.m */, 75E33B031C9CF73E00CBD0B8 /* T8NetworkBaseService.h */, 75E33B041C9CF73E00CBD0B8 /* T8NetworkBaseService.m */, 75E33B061C9D05AD00CBD0B8 /* T8NetworkError.h */, 75E33B071C9D05AD00CBD0B8 /* T8NetworkError.m */, + 75DE4EDB1CA163DD00197A05 /* T8NetworkConifig.h */, + 75DE4EDC1CA163DD00197A05 /* T8NetworkConifig.m */, ); path = T8NetWorkKit; sourceTree = ""; @@ -196,6 +209,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 75DE4EDA1CA01FBA00197A05 /* abc.jpg in Resources */, 75E33AFB1C9CF3C600CBD0B8 /* LaunchScreen.storyboard in Resources */, 75E33AF81C9CF3C600CBD0B8 /* Assets.xcassets in Resources */, 75E33AF61C9CF3C600CBD0B8 /* Main.storyboard in Resources */, @@ -259,9 +273,11 @@ files = ( 75E33B081C9D05AD00CBD0B8 /* T8NetworkError.m in Sources */, 75E33AF31C9CF3C600CBD0B8 /* ViewController.m in Sources */, + 75DE4EDD1CA163DD00197A05 /* T8NetworkConifig.m in Sources */, 75E33B1A1C9D850500CBD0B8 /* GetParams.m in Sources */, 75E33B121C9D2DEE00CBD0B8 /* DemoService.m in Sources */, 75E33B171C9D814000CBD0B8 /* PostParams.m in Sources */, + 751532DF1CA235A5004233F8 /* T8NetworkPrivate.m in Sources */, 75E33AF01C9CF3C600CBD0B8 /* AppDelegate.m in Sources */, 75E33AED1C9CF3C600CBD0B8 /* main.m in Sources */, 75E33B051C9CF73E00CBD0B8 /* T8NetworkBaseService.m in Sources */, diff --git a/T8NetworkKitDemo/T8NetworkKitDemo/Assets.xcassets/.DS_Store b/T8NetworkKitDemo/T8NetworkKitDemo/Assets.xcassets/.DS_Store new file mode 100644 index 0000000..39c0362 Binary files /dev/null and b/T8NetworkKitDemo/T8NetworkKitDemo/Assets.xcassets/.DS_Store differ diff --git a/T8NetworkKitDemo/T8NetworkKitDemo/DemoService.h b/T8NetworkKitDemo/T8NetworkKitDemo/DemoService.h index 6dff63c..4ef68ba 100644 --- a/T8NetworkKitDemo/T8NetworkKitDemo/DemoService.h +++ b/T8NetworkKitDemo/T8NetworkKitDemo/DemoService.h @@ -17,4 +17,19 @@ + (void)testRequestWithGetParmas:(GetParams *)getParams block:(RequestComplete)requestComplete; + (void)testRequestWithPostParams:(PostParams *)postParams block:(RequestComplete)requestComplete; + (void)testUploads:(T8FileModel *)fileModel block:(RequestComplete)requestComplete; ++ (void)testFilesUploads:(T8FileModelArray *)fileModelArray block:(RequestComplete)requestComplete; +@end + +@interface FriendsModel : NSObject +@property (nonatomic, strong) NSArray *list; +@property (nonatomic, assign) NSInteger status; +@property (nonatomic, copy) NSString *id; + +@end + +@interface FriendModel : NSObject +@property (nonatomic, copy) NSString *name; +@property (nonatomic, assign) NSInteger age; + + @end diff --git a/T8NetworkKitDemo/T8NetworkKitDemo/DemoService.m b/T8NetworkKitDemo/T8NetworkKitDemo/DemoService.m index ae7113c..8d85688 100644 --- a/T8NetworkKitDemo/T8NetworkKitDemo/DemoService.m +++ b/T8NetworkKitDemo/T8NetworkKitDemo/DemoService.m @@ -19,7 +19,8 @@ + (void)testRequestWithGetParmas:(GetParams *)getParams block:(RequestComplete)r NSString *urlPath = @"v2/moments"; NSMutableDictionary *mulDict = getParams.mj_keyValues; - [T8NetworkBaseService sendRequestUrlPath:urlPath httpMethod:HttpMethodGet dictParams:mulDict completeBlock:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { + T8NetworkBaseService *baseService = [T8NetworkBaseService shrareInstance]; + [baseService sendRequestUrlPath:urlPath httpMethod:HttpMethodGet dictParams:mulDict completeBlock:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { if (requestComplete) { requestComplete(status, data, error); } @@ -33,8 +34,9 @@ + (void)testRequestWithPostParams:(PostParams *)postParams block:(RequestComplet //将模型数据postParams -> Json NSMutableDictionary *mulDict = postParams.mj_keyValues; - - [T8NetworkBaseService sendRequestUrlPath:urlPath httpMethod:HttpMethodPost dictParams:mulDict completeBlock:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { + T8NetworkBaseService *baseService = [T8NetworkBaseService shrareInstance]; + + [baseService sendRequestUrlPath:urlPath httpMethod:HttpMethodPost dictParams:mulDict completeBlock:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { if (requestComplete) { requestComplete(status, data, error); } @@ -45,11 +47,33 @@ + (void)testRequestWithPostParams:(PostParams *)postParams block:(RequestComplet + (void)testUploads:(T8FileModel *)fileModel block:(RequestComplete)requestComplete { + T8NetworkBaseService *baseService = [T8NetworkBaseService shrareInstance]; + NSString *urlPath = @"v2/upload/picture"; +// NSString *urlPath = @"https://slack.com/api/files.upload?token=xoxp-28180523860-28139895139-28194787457-d910c3f484&filename=abc&pretty=1"; - [T8NetworkBaseService uploadFile:fileModel urlPath:urlPath params:nil progressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { - - } completBlock:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { + [baseService uploadFile:fileModel urlPath:urlPath params:nil progressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { + NSLog(@"bytesWritten:%lu", (unsigned long)bytesWritten); + NSLog(@"totalBytesWritten:%lld", totalBytesWritten); + } completeBlock:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { + NSLog(@"%@", data); + if (requestComplete) { + requestComplete(status, data, error); + } + }]; +} + ++ (void)testFilesUploads:(T8FileModelArray *)fileModelArray block:(RequestComplete)requestComplete +{ + NSString *urlPath = @"v2/upload/picture"; + // NSString *urlPath = @"https://slack.com/api/files.upload?token=xoxp-28180523860-28139895139-28194787457-d910c3f484&filename=abc&pretty=1"; + T8NetworkBaseService *baseService = [T8NetworkBaseService shrareInstance]; + + [baseService uploadFiles:fileModelArray urlPath:urlPath params:nil progressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { + NSLog(@"bytesWritten:%lu", (unsigned long)bytesWritten); + NSLog(@"totalBytesWritten:%lld", totalBytesWritten); + + } completeBlock:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { if (requestComplete) { requestComplete(status, data, error); } @@ -58,4 +82,19 @@ + (void)testUploads:(T8FileModel *)fileModel block:(RequestComplete)requestCompl + +@end + +@implementation FriendsModel +- (NSDictionary *)mj_ObjectClassInArray +{ + return @{@"list" : [FriendModel class]}; +} + +@end + +@implementation FriendModel + @end + + diff --git a/T8NetworkKitDemo/T8NetworkKitDemo/ViewController.m b/T8NetworkKitDemo/T8NetworkKitDemo/ViewController.m index 1c49c87..abd8bc0 100644 --- a/T8NetworkKitDemo/T8NetworkKitDemo/ViewController.m +++ b/T8NetworkKitDemo/T8NetworkKitDemo/ViewController.m @@ -8,9 +8,12 @@ #import "ViewController.h" #import "T8NetworkBaseService.h" +#import "AFNetworking.h" +#import "MJExtension.h" #import "DemoService.h" #import "PostParams.h" #import "GetParams.h" +#import "T8NetworkConifig.h" @interface ViewController () @@ -21,8 +24,18 @@ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; + T8NetworkConifig *config = [T8NetworkConifig sharedInstance]; + config.baseUrl = @"http://api-saas-dev.tinfinite.com"; + [config setHeaderBlock:^(NSMutableURLRequest *request) { + [request setValue:@"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTZlNjdjYjc3ZTJjYzI4YTIxYjg5MzI3IiwiZGV2aWNlX2lkIjoiRTQ1RTIyQkMtQUYxMC00RTI2LUJDOUYtQUI5OEFFNzE4RDQ0IiwidHMiOjE0NTgyODgxMTc1MTMsImFwcF9pZCI6IjU2YzZjMzA5MjQzY2I3MjgyMDVhM2RmZiIsImlhdCI6MTQ1ODI4ODExN30.v4Sex80uTUVN7htZz-LoDuaqHLFmtPlzcZ5jxGHXUzI" forHTTPHeaderField:@"x-access-token"]; + [request setValue:@"ewogICJwaG9uZV9tb2RlbCIgOiAiaVBob25lIiwKICAicmVsZWFzZV9jaGFubmVsIiA6ICJhcHBfc3RvcmUiLAogICJhcHBfdmVyc2lvbiIgOiAiMTAwIiwKICAib3NfdmVyc2lvbiIgOiAiOS4yLjEiLAogICJkZXZpY2VfdG9rZW4iIDogIjZjNGI2NGQ5ZDgzYTVlNjY0ZDg3N2EwNTRhODMzZWNiMzg4MmQyOWVlYTdmZWNkZTE2YWEzMGFkMzQ3MzEzYTgiLAogICJwbGF0Zm9ybSIgOiAiaU9TIgp9" forHTTPHeaderField:@"x-device-info"]; + [request setValue:@"56c6c309243cb728205a3dff" forHTTPHeaderField:@"x-app-id"]; + }]; + +// [self testFilesUpload]; +// [self testUpload]; [self testGet]; - // Do any additional setup after loading the view, typically from a nib. +// [self testJson2Model]; } - (void)testPost @@ -41,13 +54,6 @@ - (void)testPost - (void)testGet { - [T8NetworkBaseService setBaseUrl:@"http://api-saas-dev.tinfinite.com"]; - [T8NetworkBaseService setHeaderBlock:^(NSMutableURLRequest *request) { - [request setValue:@"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTZlNjdjYjc3ZTJjYzI4YTIxYjg5MzI3IiwiZGV2aWNlX2lkIjoiRTQ1RTIyQkMtQUYxMC00RTI2LUJDOUYtQUI5OEFFNzE4RDQ0IiwidHMiOjE0NTgyODgxMTc1MTMsImFwcF9pZCI6IjU2YzZjMzA5MjQzY2I3MjgyMDVhM2RmZiIsImlhdCI6MTQ1ODI4ODExN30.v4Sex80uTUVN7htZz-LoDuaqHLFmtPlzcZ5jxGHXUzI" forHTTPHeaderField:@"x-access-token"]; - [request setValue:@"ewogICJwaG9uZV9tb2RlbCIgOiAiaVBob25lIiwKICAicmVsZWFzZV9jaGFubmVsIiA6ICJhcHBfc3RvcmUiLAogICJhcHBfdmVyc2lvbiIgOiAiMTAwIiwKICAib3NfdmVyc2lvbiIgOiAiOS4yLjEiLAogICJkZXZpY2VfdG9rZW4iIDogIjZjNGI2NGQ5ZDgzYTVlNjY0ZDg3N2EwNTRhODMzZWNiMzg4MmQyOWVlYTdmZWNkZTE2YWEzMGFkMzQ3MzEzYTgiLAogICJwbGF0Zm9ybSIgOiAiaU9TIgp9" forHTTPHeaderField:@"x-device-info"]; - [request setValue:@"56c6c309243cb728205a3dff" forHTTPHeaderField:@"x-app-id"]; - }]; - GetParams *getParam = [[GetParams alloc]init]; [DemoService testRequestWithGetParmas:getParam block:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { NSLog(@"%@", data); @@ -56,27 +62,82 @@ - (void)testGet - (void)testUpload { - [T8NetworkBaseService setBaseUrl:@"http://api-saas-dev.tinfinite.com"]; - [T8NetworkBaseService setHeaderBlock:^(NSMutableURLRequest *request) { - [request setValue:@"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTZlNjdjYjc3ZTJjYzI4YTIxYjg5MzI3IiwiZGV2aWNlX2lkIjoiRTQ1RTIyQkMtQUYxMC00RTI2LUJDOUYtQUI5OEFFNzE4RDQ0IiwidHMiOjE0NTgyODgxMTc1MTMsImFwcF9pZCI6IjU2YzZjMzA5MjQzY2I3MjgyMDVhM2RmZiIsImlhdCI6MTQ1ODI4ODExN30.v4Sex80uTUVN7htZz-LoDuaqHLFmtPlzcZ5jxGHXUzI" forHTTPHeaderField:@"x-access-token"]; - [request setValue:@"ewogICJwaG9uZV9tb2RlbCIgOiAiaVBob25lIiwKICAicmVsZWFzZV9jaGFubmVsIiA6ICJhcHBfc3RvcmUiLAogICJhcHBfdmVyc2lvbiIgOiAiMTAwIiwKICAib3NfdmVyc2lvbiIgOiAiOS4yLjEiLAogICJkZXZpY2VfdG9rZW4iIDogIjZjNGI2NGQ5ZDgzYTVlNjY0ZDg3N2EwNTRhODMzZWNiMzg4MmQyOWVlYTdmZWNkZTE2YWEzMGFkMzQ3MzEzYTgiLAogICJwbGF0Zm9ybSIgOiAiaU9TIgp9" forHTTPHeaderField:@"x-device-info"]; - [request setValue:@"56c6c309243cb728205a3dff" forHTTPHeaderField:@"x-app-id"]; - }]; - UIImage *image = [UIImage imageNamed:@"abc"]; + UIImage *image = [UIImage imageNamed:@"bcd"]; if (image) { NSLog(@"image not nil"); } - NSData *data = UIImageJPEGRepresentation(image, 0.3); + NSData *data = UIImageJPEGRepresentation(image, 1); T8FileModel *fileModel = [[T8FileModel alloc]init]; fileModel.data = data; - fileModel.type = FileModelPath; + fileModel.type = FileModelData; fileModel.mimeType =@"image/jpg"; - fileModel.path = @"/Users/Ryeagle/Downloads/bcd.jpg"; - + NSString *filePath = [[NSBundle mainBundle] pathForResource:@"abc" ofType:@"jpg"] ; + fileModel.path = filePath; + UIImage *image1 = [UIImage imageWithContentsOfFile:fileModel.path]; + if (image1) { + NSLog(@"image1 is not nil"); + } + fileModel.name = @"file"; + fileModel.fileName = @"abc.jpg"; + [DemoService testUploads:fileModel block:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { }]; +} + +- (void)testFilesUpload +{ + UIImage *image = [UIImage imageNamed:@"bcd"]; + NSData *data = UIImageJPEGRepresentation(image, 0.3); + NSString *filePath = [[NSBundle mainBundle] pathForResource:@"abc" ofType:@"jpg"] ; + NSLog(@"%@", filePath); + T8FileModel *fileModel1 = [[T8FileModel alloc]init]; + T8FileModel *fileModel2 = [[T8FileModel alloc]init]; + T8FileModel *fileModel3 = [[T8FileModel alloc]init]; + + + fileModel1.data = data; + fileModel1.type = FileModelData; + fileModel1.mimeType =@"image/jpg"; + fileModel1.path = filePath; + fileModel1.name = @"file1d"; + fileModel1.fileName = @"abc.jpg"; + + fileModel2.data = data; + fileModel2.type = FileModelData; + fileModel2.mimeType =@"image/jpg"; + fileModel2.path = filePath; + fileModel2.name = @"filedd"; + fileModel2.fileName = @"bcd.jpg"; + + fileModel3.data = data; + fileModel3.type = FileModelPath; + fileModel3.mimeType =@"image/jpg"; + fileModel3.path = filePath; + fileModel3.name = @"filebb"; + fileModel3.fileName = @"cde.jpg"; + + + T8FileModelArray *fileModelArray = [[T8FileModelArray alloc]init]; + fileModelArray.fileModelArray = @[fileModel1, fileModel2, fileModel3]; + + [DemoService testFilesUploads:fileModelArray block:^(RequestStatus status, NSDictionary *data, T8NetworkError *error) { + }]; +} +- (void)testJson2Model +{ + NSArray *array = @[@{@"name":@"a", @"age":@12},@{@"name":@"b", @"age":@4}]; + NSDictionary *dict = @{ + @"list":array, + @"status":@2, + @"id":@"12" + }; + FriendsModel *models = [FriendsModel mj_objectWithKeyValues:dict]; + NSLog(@"%@", models.list[1]); + NSLog(@"%ld", models.status); + NSLog(@"%@", models.id); } + @end diff --git a/T8NetworkKitDemo/T8NetworkKitDemo/abc.jpg b/T8NetworkKitDemo/T8NetworkKitDemo/abc.jpg new file mode 100644 index 0000000..3ac4cf2 Binary files /dev/null and b/T8NetworkKitDemo/T8NetworkKitDemo/abc.jpg differ