diff --git a/Categories/NSString+Qiniu.m b/Categories/NSString+Qiniu.m index 928ebac..23bd32f 100644 --- a/Categories/NSString+Qiniu.m +++ b/Categories/NSString+Qiniu.m @@ -12,47 +12,47 @@ @implementation NSString (Qiniu) - (NSString *)qnImageInfo { - return [NSString stringWithFormat:@"%@?imageInfo", self]; + return [[NSString stringWithFormat:@"%@?imageInfo", self] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; } - (NSString *)qnEXIF { - return [NSString stringWithFormat:@"%@?exif", self]; + return [[NSString stringWithFormat:@"%@?exif", self] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; } - (NSString *)qnScaleToPercent:(CGFloat)percent { - return [NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/!%fp", self, percent]; + return [[NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/!%fp", self, percent] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; } - (NSString *)qnScaleFitWidth:(CGFloat)width { - return [NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/%f", self, width]; + return [[NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/%f", self, width] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; } - (NSString *)qnScaleFitHeight:(CGFloat)height { - return [NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/x%f", self, height]; + return [[NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/x%f", self, height] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; } - (NSString *)qnScaleAspectFit:(CGSize)size { - return [NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/%fx%f", self, size.width, size.height]; + return [[NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/%fx%f", self, size.width, size.height] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; } - (NSString *)qnScaleAspectFill:(CGSize)size { - return [NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/%fx%f^", self, size.width, size.height]; + return [[NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/%fx%f^", self, size.width, size.height] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; } - (NSString *)qnScaleToFill:(CGSize)size { - return [NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/%fx%f!", self, size.width, size.height]; + return [[NSString stringWithFormat:@"%@?imageMogr/v2/thumbnail/%fx%f!", self, size.width, size.height] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; } - (NSString *)qnCropFromCenterToSize:(CGSize)size { - return [NSString stringWithFormat:@"%@?imageMogr/v2/gravity/center/crop/!%fx%f", self, size.width, size.height]; + return [[NSString stringWithFormat:@"%@?imageMogr/v2/gravity/center/crop/!%fx%f", self, size.width, size.height] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; } @end diff --git a/QiniuDemo/QiniuDemo.xcodeproj/project.pbxproj b/QiniuDemo/QiniuDemo.xcodeproj/project.pbxproj index 9400f99..34894fb 100644 --- a/QiniuDemo/QiniuDemo.xcodeproj/project.pbxproj +++ b/QiniuDemo/QiniuDemo.xcodeproj/project.pbxproj @@ -21,21 +21,21 @@ BACC919818BFA40000D87926 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BACC917A18BFA40000D87926 /* UIKit.framework */; }; BACC91A018BFA40000D87926 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = BACC919E18BFA40000D87926 /* InfoPlist.strings */; }; BACC91A218BFA40000D87926 /* QiniuDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC91A118BFA40000D87926 /* QiniuDemoTests.m */; }; - BACC923718C0EF1400D87926 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC921618C0EF1400D87926 /* AFHTTPRequestOperation.m */; }; - BACC923818C0EF1400D87926 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC921818C0EF1400D87926 /* AFHTTPRequestOperationManager.m */; }; - BACC923918C0EF1400D87926 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC921A18C0EF1400D87926 /* AFHTTPSessionManager.m */; }; - BACC923A18C0EF1400D87926 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC921D18C0EF1400D87926 /* AFNetworkReachabilityManager.m */; }; - BACC923B18C0EF1400D87926 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC921F18C0EF1400D87926 /* AFSecurityPolicy.m */; }; - BACC923C18C0EF1400D87926 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC922118C0EF1400D87926 /* AFURLConnectionOperation.m */; }; - BACC923D18C0EF1400D87926 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC922318C0EF1400D87926 /* AFURLRequestSerialization.m */; }; - BACC923E18C0EF1400D87926 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC922518C0EF1400D87926 /* AFURLResponseSerialization.m */; }; - BACC923F18C0EF1400D87926 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC922718C0EF1400D87926 /* AFURLSessionManager.m */; }; BACC924018C0EF1400D87926 /* QiniuBlkputRet.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC922918C0EF1400D87926 /* QiniuBlkputRet.m */; }; BACC924118C0EF1400D87926 /* QiniuHttpClient.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC922C18C0EF1400D87926 /* QiniuHttpClient.m */; }; BACC924218C0EF1400D87926 /* QiniuResumableClient.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC922E18C0EF1400D87926 /* QiniuResumableClient.m */; }; BACC924318C0EF1400D87926 /* QiniuResumableUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC923018C0EF1400D87926 /* QiniuResumableUploader.m */; }; BACC924418C0EF1400D87926 /* QiniuSimpleUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC923318C0EF1400D87926 /* QiniuSimpleUploader.m */; }; BACC924518C0EF1400D87926 /* QiniuUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = BACC923618C0EF1400D87926 /* QiniuUtils.m */; }; + DF0ED6571941DE9D00D2BB59 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0ED6451941DE9D00D2BB59 /* AFHTTPRequestOperation.m */; }; + DF0ED6581941DE9D00D2BB59 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0ED6471941DE9D00D2BB59 /* AFHTTPRequestOperationManager.m */; }; + DF0ED6591941DE9D00D2BB59 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0ED6491941DE9D00D2BB59 /* AFHTTPSessionManager.m */; }; + DF0ED65A1941DE9D00D2BB59 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0ED64C1941DE9D00D2BB59 /* AFNetworkReachabilityManager.m */; }; + DF0ED65B1941DE9D00D2BB59 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0ED64E1941DE9D00D2BB59 /* AFSecurityPolicy.m */; }; + DF0ED65C1941DE9D00D2BB59 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0ED6501941DE9D00D2BB59 /* AFURLConnectionOperation.m */; }; + DF0ED65D1941DE9D00D2BB59 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0ED6521941DE9D00D2BB59 /* AFURLRequestSerialization.m */; }; + DF0ED65E1941DE9D00D2BB59 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0ED6541941DE9D00D2BB59 /* AFURLResponseSerialization.m */; }; + DF0ED65F1941DE9D00D2BB59 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0ED6561941DE9D00D2BB59 /* AFURLSessionManager.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -68,25 +68,6 @@ BACC919D18BFA40000D87926 /* QiniuDemoTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "QiniuDemoTests-Info.plist"; sourceTree = ""; }; BACC919F18BFA40000D87926 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; BACC91A118BFA40000D87926 /* QiniuDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QiniuDemoTests.m; sourceTree = ""; }; - BACC921518C0EF1400D87926 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperation.h; sourceTree = ""; }; - BACC921618C0EF1400D87926 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperation.m; sourceTree = ""; }; - BACC921718C0EF1400D87926 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperationManager.h; sourceTree = ""; }; - BACC921818C0EF1400D87926 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperationManager.m; sourceTree = ""; }; - BACC921918C0EF1400D87926 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPSessionManager.h; sourceTree = ""; }; - BACC921A18C0EF1400D87926 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManager.m; sourceTree = ""; }; - BACC921B18C0EF1400D87926 /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworking.h; sourceTree = ""; }; - BACC921C18C0EF1400D87926 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkReachabilityManager.h; sourceTree = ""; }; - BACC921D18C0EF1400D87926 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManager.m; sourceTree = ""; }; - BACC921E18C0EF1400D87926 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSecurityPolicy.h; sourceTree = ""; }; - BACC921F18C0EF1400D87926 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicy.m; sourceTree = ""; }; - BACC922018C0EF1400D87926 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = ""; }; - BACC922118C0EF1400D87926 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = ""; }; - BACC922218C0EF1400D87926 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLRequestSerialization.h; sourceTree = ""; }; - BACC922318C0EF1400D87926 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLRequestSerialization.m; sourceTree = ""; }; - BACC922418C0EF1400D87926 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLResponseSerialization.h; sourceTree = ""; }; - BACC922518C0EF1400D87926 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLResponseSerialization.m; sourceTree = ""; }; - BACC922618C0EF1400D87926 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = ""; }; - BACC922718C0EF1400D87926 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = ""; }; BACC922818C0EF1400D87926 /* QiniuBlkputRet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QiniuBlkputRet.h; sourceTree = ""; }; BACC922918C0EF1400D87926 /* QiniuBlkputRet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QiniuBlkputRet.m; sourceTree = ""; }; BACC922A18C0EF1400D87926 /* QiniuConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QiniuConfig.h; sourceTree = ""; }; @@ -102,6 +83,25 @@ BACC923418C0EF1400D87926 /* QiniuUploadDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QiniuUploadDelegate.h; sourceTree = ""; }; BACC923518C0EF1400D87926 /* QiniuUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QiniuUtils.h; sourceTree = ""; }; BACC923618C0EF1400D87926 /* QiniuUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QiniuUtils.m; sourceTree = ""; }; + DF0ED6441941DE9D00D2BB59 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperation.h; sourceTree = ""; }; + DF0ED6451941DE9D00D2BB59 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperation.m; sourceTree = ""; }; + DF0ED6461941DE9D00D2BB59 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperationManager.h; sourceTree = ""; }; + DF0ED6471941DE9D00D2BB59 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperationManager.m; sourceTree = ""; }; + DF0ED6481941DE9D00D2BB59 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPSessionManager.h; sourceTree = ""; }; + DF0ED6491941DE9D00D2BB59 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManager.m; sourceTree = ""; }; + DF0ED64A1941DE9D00D2BB59 /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworking.h; sourceTree = ""; }; + DF0ED64B1941DE9D00D2BB59 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkReachabilityManager.h; sourceTree = ""; }; + DF0ED64C1941DE9D00D2BB59 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManager.m; sourceTree = ""; }; + DF0ED64D1941DE9D00D2BB59 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSecurityPolicy.h; sourceTree = ""; }; + DF0ED64E1941DE9D00D2BB59 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicy.m; sourceTree = ""; }; + DF0ED64F1941DE9D00D2BB59 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = ""; }; + DF0ED6501941DE9D00D2BB59 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = ""; }; + DF0ED6511941DE9D00D2BB59 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLRequestSerialization.h; sourceTree = ""; }; + DF0ED6521941DE9D00D2BB59 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLRequestSerialization.m; sourceTree = ""; }; + DF0ED6531941DE9D00D2BB59 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLResponseSerialization.h; sourceTree = ""; }; + DF0ED6541941DE9D00D2BB59 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLResponseSerialization.m; sourceTree = ""; }; + DF0ED6551941DE9D00D2BB59 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = ""; }; + DF0ED6561941DE9D00D2BB59 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -205,7 +205,7 @@ BACC921318C0EF1400D87926 /* QiniuSDK */ = { isa = PBXGroup; children = ( - BACC921418C0EF1400D87926 /* AFNetwork2 */, + DF0ED6431941DE9D00D2BB59 /* AFNetworking */, BACC922818C0EF1400D87926 /* QiniuBlkputRet.h */, BACC922918C0EF1400D87926 /* QiniuBlkputRet.m */, BACC922A18C0EF1400D87926 /* QiniuConfig.h */, @@ -226,30 +226,30 @@ path = ../../QiniuSDK; sourceTree = ""; }; - BACC921418C0EF1400D87926 /* AFNetwork2 */ = { + DF0ED6431941DE9D00D2BB59 /* AFNetworking */ = { isa = PBXGroup; children = ( - BACC921518C0EF1400D87926 /* AFHTTPRequestOperation.h */, - BACC921618C0EF1400D87926 /* AFHTTPRequestOperation.m */, - BACC921718C0EF1400D87926 /* AFHTTPRequestOperationManager.h */, - BACC921818C0EF1400D87926 /* AFHTTPRequestOperationManager.m */, - BACC921918C0EF1400D87926 /* AFHTTPSessionManager.h */, - BACC921A18C0EF1400D87926 /* AFHTTPSessionManager.m */, - BACC921B18C0EF1400D87926 /* AFNetworking.h */, - BACC921C18C0EF1400D87926 /* AFNetworkReachabilityManager.h */, - BACC921D18C0EF1400D87926 /* AFNetworkReachabilityManager.m */, - BACC921E18C0EF1400D87926 /* AFSecurityPolicy.h */, - BACC921F18C0EF1400D87926 /* AFSecurityPolicy.m */, - BACC922018C0EF1400D87926 /* AFURLConnectionOperation.h */, - BACC922118C0EF1400D87926 /* AFURLConnectionOperation.m */, - BACC922218C0EF1400D87926 /* AFURLRequestSerialization.h */, - BACC922318C0EF1400D87926 /* AFURLRequestSerialization.m */, - BACC922418C0EF1400D87926 /* AFURLResponseSerialization.h */, - BACC922518C0EF1400D87926 /* AFURLResponseSerialization.m */, - BACC922618C0EF1400D87926 /* AFURLSessionManager.h */, - BACC922718C0EF1400D87926 /* AFURLSessionManager.m */, + DF0ED6441941DE9D00D2BB59 /* AFHTTPRequestOperation.h */, + DF0ED6451941DE9D00D2BB59 /* AFHTTPRequestOperation.m */, + DF0ED6461941DE9D00D2BB59 /* AFHTTPRequestOperationManager.h */, + DF0ED6471941DE9D00D2BB59 /* AFHTTPRequestOperationManager.m */, + DF0ED6481941DE9D00D2BB59 /* AFHTTPSessionManager.h */, + DF0ED6491941DE9D00D2BB59 /* AFHTTPSessionManager.m */, + DF0ED64A1941DE9D00D2BB59 /* AFNetworking.h */, + DF0ED64B1941DE9D00D2BB59 /* AFNetworkReachabilityManager.h */, + DF0ED64C1941DE9D00D2BB59 /* AFNetworkReachabilityManager.m */, + DF0ED64D1941DE9D00D2BB59 /* AFSecurityPolicy.h */, + DF0ED64E1941DE9D00D2BB59 /* AFSecurityPolicy.m */, + DF0ED64F1941DE9D00D2BB59 /* AFURLConnectionOperation.h */, + DF0ED6501941DE9D00D2BB59 /* AFURLConnectionOperation.m */, + DF0ED6511941DE9D00D2BB59 /* AFURLRequestSerialization.h */, + DF0ED6521941DE9D00D2BB59 /* AFURLRequestSerialization.m */, + DF0ED6531941DE9D00D2BB59 /* AFURLResponseSerialization.h */, + DF0ED6541941DE9D00D2BB59 /* AFURLResponseSerialization.m */, + DF0ED6551941DE9D00D2BB59 /* AFURLSessionManager.h */, + DF0ED6561941DE9D00D2BB59 /* AFURLSessionManager.m */, ); - path = AFNetwork2; + path = AFNetworking; sourceTree = ""; }; /* End PBXGroup section */ @@ -351,22 +351,22 @@ buildActionMask = 2147483647; files = ( BACC924518C0EF1400D87926 /* QiniuUtils.m in Sources */, - BACC923718C0EF1400D87926 /* AFHTTPRequestOperation.m in Sources */, + DF0ED65B1941DE9D00D2BB59 /* AFSecurityPolicy.m in Sources */, + DF0ED6581941DE9D00D2BB59 /* AFHTTPRequestOperationManager.m in Sources */, + DF0ED6571941DE9D00D2BB59 /* AFHTTPRequestOperation.m in Sources */, BACC924118C0EF1400D87926 /* QiniuHttpClient.m in Sources */, BACC924418C0EF1400D87926 /* QiniuSimpleUploader.m in Sources */, BACC918718BFA40000D87926 /* QiniuDemoAppDelegate.m in Sources */, - BACC923818C0EF1400D87926 /* AFHTTPRequestOperationManager.m in Sources */, - BACC923A18C0EF1400D87926 /* AFNetworkReachabilityManager.m in Sources */, BACC924318C0EF1400D87926 /* QiniuResumableUploader.m in Sources */, BACC924018C0EF1400D87926 /* QiniuBlkputRet.m in Sources */, - BACC923E18C0EF1400D87926 /* AFURLResponseSerialization.m in Sources */, - BACC923C18C0EF1400D87926 /* AFURLConnectionOperation.m in Sources */, + DF0ED6591941DE9D00D2BB59 /* AFHTTPSessionManager.m in Sources */, BACC924218C0EF1400D87926 /* QiniuResumableClient.m in Sources */, - BACC923B18C0EF1400D87926 /* AFSecurityPolicy.m in Sources */, - BACC923918C0EF1400D87926 /* AFHTTPSessionManager.m in Sources */, - BACC923D18C0EF1400D87926 /* AFURLRequestSerialization.m in Sources */, - BACC923F18C0EF1400D87926 /* AFURLSessionManager.m in Sources */, + DF0ED65C1941DE9D00D2BB59 /* AFURLConnectionOperation.m in Sources */, + DF0ED65D1941DE9D00D2BB59 /* AFURLRequestSerialization.m in Sources */, + DF0ED65F1941DE9D00D2BB59 /* AFURLSessionManager.m in Sources */, + DF0ED65E1941DE9D00D2BB59 /* AFURLResponseSerialization.m in Sources */, BACC918D18BFA40000D87926 /* QiniuDemoViewController.m in Sources */, + DF0ED65A1941DE9D00D2BB59 /* AFNetworkReachabilityManager.m in Sources */, BACC918318BFA40000D87926 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/QiniuSDK.xcodeproj/project.pbxproj b/QiniuSDK.xcodeproj/project.pbxproj index 556c151..b0a5e1f 100644 --- a/QiniuSDK.xcodeproj/project.pbxproj +++ b/QiniuSDK.xcodeproj/project.pbxproj @@ -273,7 +273,7 @@ BAB59D3818B8EE7400F235AA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0500; + LastUpgradeCheck = 0510; ORGANIZATIONNAME = Qiniu; }; buildConfigurationList = BAB59D3B18B8EE7400F235AA /* Build configuration list for PBXProject "QiniuSDK" */; @@ -362,7 +362,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -400,7 +399,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -463,7 +461,6 @@ BAB59D6718B8EE7400F235AA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", @@ -484,7 +481,6 @@ BAB59D6818B8EE7400F235AA /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", diff --git a/QiniuSDK.xcodeproj/xcshareddata/xcschemes/QiniuSDKTests.xcscheme b/QiniuSDK.xcodeproj/xcshareddata/xcschemes/QiniuSDKTests.xcscheme index ace77f6..5843485 100644 --- a/QiniuSDK.xcodeproj/xcshareddata/xcschemes/QiniuSDKTests.xcscheme +++ b/QiniuSDK.xcodeproj/xcshareddata/xcschemes/QiniuSDKTests.xcscheme @@ -1,6 +1,6 @@ -#define kQiniuUpHost @"http://up.qiniu.com" +#define kQiniuUpHost @"http://upload.qiniu.com" #define kQiniuUndefinedKey @"?" #define kQiniuUserAgent @"qiniu-ios-sdk" diff --git a/QiniuSDK/QiniuResumableClient.h b/QiniuSDK/QiniuResumableClient.h index b998417..bb0a428 100644 --- a/QiniuSDK/QiniuResumableClient.h +++ b/QiniuSDK/QiniuResumableClient.h @@ -71,7 +71,7 @@ typedef void (^QiniuRioNotifyErr)(int blockIndex, int blockSize, NSError* error) -@interface QiniuRioPutExtra : NSObject +@interface QiniuRioPutExtra : NSObject + (QiniuRioPutExtra *)extraWithParams:(NSDictionary *)params; - (QiniuRioPutExtra *)init; diff --git a/QiniuSDK/QiniuResumableClient.m b/QiniuSDK/QiniuResumableClient.m index 3a9ecc4..fc20c84 100644 --- a/QiniuSDK/QiniuResumableClient.m +++ b/QiniuSDK/QiniuResumableClient.m @@ -182,8 +182,13 @@ - (void)mkfile:(NSString *)key { NSString *mimeStr = extra.mimeType == nil ? @"" : [[NSString alloc] initWithFormat:@"/mimetype/%@", [QiniuResumableClient encode:extra.mimeType]]; - NSString *keyStr = [[NSString alloc] initWithFormat:@"/key/%@", [QiniuResumableClient encode:key]]; - NSString *callUrl = [[NSString alloc] initWithFormat:@"%@/mkfile/%u%@%@", kQiniuUpHost, (unsigned int)fileSize, mimeStr, keyStr]; + + NSString *callUrl = [[NSString alloc] initWithFormat:@"%@/mkfile/%u%@", kQiniuUpHost, (unsigned int)fileSize, mimeStr]; + + if (key != nil) { + NSString *keyStr = [[NSString alloc] initWithFormat:@"/key/%@", [QiniuResumableClient encode:key]]; + callUrl = [NSString stringWithFormat:@"%@%@", callUrl, keyStr]; + } if (extra.params != nil) { NSEnumerator *e = [extra.params keyEnumerator]; @@ -285,4 +290,29 @@ - (float) chunkUploadedAndPercent return percent; } +- (void) encodeWithCoder:(NSCoder *)aCoder { + [aCoder encodeObject:self.params forKey:@"params"]; + [aCoder encodeObject:self.mimeType forKey:@"mimeType"]; + [aCoder encodeInt32:self.chunkSize forKey:@"chunkSize"]; + [aCoder encodeInt32:self.tryTimes forKey:@"tryTimes"]; + [aCoder encodeInt32:self.concurrentNum forKey:@"concurrentNum"]; + [aCoder encodeObject:self.progresses forKey:@"progresses"]; + [aCoder encodeInt32:self.blockCount forKey:@"blockCount"]; + [aCoder encodeInt32:self.chunkCount forKey:@"chunkCount"]; +} + +- (id) initWithCoder:(NSCoder *)aDecoder { + if (self = [super init]) { + self.params = [aDecoder decodeObjectForKey:@"params"]; + self.mimeType = [aDecoder decodeObjectForKey:@"mimeType"]; + self.chunkSize = [aDecoder decodeInt32ForKey:@"chunkSize"]; + self.tryTimes = [aDecoder decodeInt32ForKey:@"tryTimes"]; + self.concurrentNum = [aDecoder decodeInt32ForKey:@"concurrentNum"]; + self.progresses = [aDecoder decodeObjectForKey:@"progresses"]; + self.blockCount = [aDecoder decodeInt32ForKey:@"blockCount"]; + self.chunkCount = [aDecoder decodeInt32ForKey:@"chunkCount"]; + } + return self; +} + @end diff --git a/QiniuSDK/QiniuResumableUploader.m b/QiniuSDK/QiniuResumableUploader.m index 4be769e..4ffa071 100644 --- a/QiniuSDK/QiniuResumableUploader.m +++ b/QiniuSDK/QiniuResumableUploader.m @@ -8,6 +8,7 @@ #import "QiniuResumableUploader.h" #import "QiniuResumableClient.h" +#import "QiniuUtils.h" @implementation QiniuResumableUploader @@ -116,9 +117,10 @@ - (void) uploadFile:(NSString *)filePath [self.delegate uploadProgressUpdated:filePath percent:percent]; } } - complete:blockComplete]; + complete:weakBlockComplete]; } else { if (extra.notifyErr != nil) { + error = qiniuErrorWithOperation(operation, error); extra.notifyErr(blockIndex, blockSize1, error); } } @@ -145,6 +147,7 @@ - (void) uploadFile:(NSString *)filePath progress:nil complete:^(AFHTTPRequestOperation *operation, NSError *error) { if (error) { + error = qiniuErrorWithOperation(operation, error); [self.delegate uploadFailed:filePath error:error]; }else{ NSDictionary *resp = operation.responseObject; diff --git a/QiniuSDK/QiniuSimpleUploader.m b/QiniuSDK/QiniuSimpleUploader.m index 95fe562..f27f82f 100644 --- a/QiniuSDK/QiniuSimpleUploader.m +++ b/QiniuSDK/QiniuSimpleUploader.m @@ -51,6 +51,7 @@ - (void) uploadFile:(NSString *)filePath } } complete:^(AFHTTPRequestOperation *operation, NSError *error) { if (error) { + error = qiniuErrorWithOperation(operation, error); [self.delegate uploadFailed:filePath error:error]; }else{ NSDictionary *resp = operation.responseObject; diff --git a/QiniuSDK/QiniuUtils.h b/QiniuSDK/QiniuUtils.h index 5845d97..f892443 100644 --- a/QiniuSDK/QiniuUtils.h +++ b/QiniuSDK/QiniuUtils.h @@ -10,4 +10,4 @@ NSError *qiniuError(int errorCode, NSString *errorDescription); -NSError *qiniuErrorWithRequest(AFHTTPRequestOperation *request); \ No newline at end of file +NSError *qiniuErrorWithOperation(AFHTTPRequestOperation *operation, NSError *error); diff --git a/QiniuSDK/QiniuUtils.m b/QiniuSDK/QiniuUtils.m index b4d3961..b175140 100644 --- a/QiniuSDK/QiniuUtils.m +++ b/QiniuSDK/QiniuUtils.m @@ -14,37 +14,26 @@ return [NSError errorWithDomain:kQiniuErrorDomain code:errorCode userInfo:[NSDictionary dictionaryWithObject:errorDescription forKey:kQiniuErrorKey]]; } -NSError *qiniuErrorWithRequest(AFHTTPRequestOperation *request) { - NSDictionary *dic = nil; - NSError *httpError = nil; - long errorCode = 400; - - if (request) { - NSDictionary *responseObj = request.responseObject; - if ([responseObj isKindOfClass:NSDictionary.class]) { - dic = responseObj; - } - httpError = [request error]; - errorCode = [request response].statusCode; +NSError *qiniuErrorWithOperation(AFHTTPRequestOperation *operation, NSError *error) { + + if (operation == nil || operation.responseObject == nil) { + return error; } - - NSString *errorDescription = nil; - if (dic) { // Check if there is response content. - NSObject *errorObj = [dic objectForKey:kQiniuErrorKey]; - if (errorObj) { - errorDescription = (NSString *)errorObj; - } + + NSMutableDictionary *userInfo = nil; + NSInteger errorCode = -1; + + if ([operation.responseObject isKindOfClass:NSDictionary.class]) { + userInfo = [NSMutableDictionary dictionaryWithDictionary:operation.responseObject]; } - if (errorDescription == nil && httpError) { // No response, then try to retrieve the HTTP error info. - errorCode = [httpError code]; - errorDescription = [httpError localizedDescription]; + errorCode = [operation.response statusCode]; + + if (!userInfo) { + userInfo = [NSMutableDictionary init]; } - - NSString *reqid = [[request.response allHeaderFields] objectForKey:@"X-Reqid"]; - NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithObject:reqid forKey:@"reqid"]; - if (errorDescription) { - [userInfo setObject:errorDescription forKey:kQiniuErrorKey]; - } - + + NSString *reqid = [[operation.response allHeaderFields] objectForKey:@"X-Reqid"]; + [userInfo setObject:reqid forKey:@"reqid"]; + return [NSError errorWithDomain:kQiniuErrorDomain code:errorCode userInfo:userInfo]; } diff --git a/QiniuSDKTests/QiniuSDKTests.m b/QiniuSDKTests/QiniuSDKTests.m index 5faea3a..1eedd1c 100644 --- a/QiniuSDKTests/QiniuSDKTests.m +++ b/QiniuSDKTests/QiniuSDKTests.m @@ -41,7 +41,7 @@ - (void)setUp // Prepare the uptoken // token with a year, 14.2.23 _token = @"6UOyH0xzsnOF-uKmsHgpi7AhGWdfvI8glyYV3uPg:m-8jeXMWC-4kstLEHEMCfZAZnWc=:eyJkZWFkbGluZSI6MTQyNDY4ODYxOCwic2NvcGUiOiJ0ZXN0MzY5In0="; - + _done = false; _progressReceived = false; } @@ -79,6 +79,8 @@ - (void)uploadFailed:(NSString *)theFilePath error:(NSError *)error _done = YES; _error = error; NSLog(@"Upload Failed: %@ - Reason: %@", theFilePath, error); + NSString *reqid = [error.userInfo valueForKey:@"reqid"]; + XCTAssertFalse(reqid == nil, @"no reqid"); } - (NSString *) timeString { @@ -169,6 +171,17 @@ - (void)testResumableUploadSmall XCTAssertEqual(_succeed, YES, "ResumableUpload failed, error: %@", _error); } +- (void)testResumableUploadWithoutKey +{ + QiniuResumableUploader *uploader = [[QiniuResumableUploader alloc] initWithToken:_token]; + uploader.delegate = self; + + NSLog(@"resumable upload"); + [uploader uploadFile:_filePath key:nil extra:nil]; + [self waitFinish]; + XCTAssertEqual(_succeed, YES, "ResumableUpload failed, error: %@", _error); +} + // */ - (void)testResumableUploadWithParam @@ -205,6 +218,47 @@ - (void)testResumableUploadMedium XCTAssertEqual(_succeed, YES, "ResumableUpload failed, error: %@", _error); } +- (void)testEncodeExtra +{ + QiniuResumableUploader *uploader = [[QiniuResumableUploader alloc] initWithToken:_token]; + uploader.delegate = self; + QiniuRioPutExtra *extra = [[QiniuRioPutExtra alloc] init]; + extra.notify = ^(int blockIndex, int blockSize, QiniuBlkputRet* ret) { + NSLog(@"[testEncodeExtra]notify for data persistence, blockIndex:%d, blockSize:%d, offset:%d ctx:%@", + blockIndex, blockSize, (unsigned int)ret.offset, ret.ctx); + }; + + NSString *key = [NSString stringWithFormat:@"test-encode-extra-%@.mp4", [self timeString]]; + [uploader uploadFile:_fileMedium key:key extra:extra]; + + NSData *serialized; + int loop = 40; + while (loop > 0) { + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]; + if (extra.uploadedBlockNumber > 0) { + [extra cancelTasks]; + serialized = [NSKeyedArchiver archivedDataWithRootObject:extra]; + NSLog(@"extra.uploadedBlockNumber: %d", (unsigned int)extra.uploadedBlockNumber); + break; + } + loop--; + } + if (loop == 0) { + XCTFail(@"upload block time out"); + } + + QiniuRioPutExtra *newExtra = [NSKeyedUnarchiver unarchiveObjectWithData:serialized]; + newExtra.notify = ^(int blockIndex, int blockSize, QiniuBlkputRet* ret) { + NSLog(@"[testEncodeExtra,new]notify for data persistence, blockIndex:%d, blockSize:%d, offset:%d ctx:%@", + blockIndex, blockSize, (unsigned int)ret.offset, ret.ctx); + XCTAssertTrue([extra.progresses[blockIndex] isKindOfClass:[NSNull class]], @"index of progresses should be nil, index: %d", blockIndex); + }; + + [uploader uploadFile:_fileMedium key:key extra:newExtra]; + [self waitFinish]; + XCTAssertEqual(_succeed, YES, "ResumableUpload reuse extra failed, error: %@", _error); +} + //- (void)testResumableUploadLarge //{