最近 須要搞一個阿里雲的文件上傳 手機端主要作了圖片上傳json
pod安裝:pod 'AliyunOSSiOS', '~> 2.5.2'服務器
主要就是須要四個參數:accessKey secretKey endpoint bucketsession
這四個參數都是在網頁生成的 另外在 頁面 建立accessKey secretKey 的時候換須要短信驗證碼 真心麻煩dom
集成過程當中 主要是要選好endpoint (其中內網 外網是不同的 第一次弄得時候在這上面搞了半天 原來endpoint弄錯了)異步
最後生成的圖片url由endpoint+bucket(+文件夾名字(若是有的話))+你本身命名的圖片名字 構成的ide
上代碼ui
NSString * const AccessKey = @"XXXXXXXXXXXXX"; NSString * const SecretKey = @"XXXXXXXXXXXXX"; NSString * const endPoint = @"XXXXXXXXXXXXX"; NSString * const bucketName = @"XXXXXXXXXXXXX"; static NSString *imageTemp = @"imgTemp"; ------------------------------------------------------------------------------------------- - (void)initOSSClient { id<OSSCredentialProvider> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:AccessKey secretKey:SecretKey]; // 自實現簽名,能夠用本地簽名也能夠遠程加簽 // id<OSSCredentialProvider> credential1 = [[OSSCustomSignerCredentialProvider alloc] initWithImplementedSigner:^NSString *(NSString *contentToSign, NSError *__autoreleasing *error) { // NSString *signature = [OSSUtil calBase64Sha1WithData:contentToSign withSecret:@"<your secret key>"]; // if (signature != nil) { // *error = nil; // } else { // // construct error object // *error = [NSError errorWithDomain:@"<your error domain>" code:OSSClientErrorCodeSignFailed userInfo:nil]; // return nil; // } // return [NSString stringWithFormat:@"OSS %@:%@", @"<your access key>", signature]; // }]; // Federation鑑權,建議經過訪問遠程業務服務器獲取簽名 // 假設訪問業務服務器的獲取token服務時,返回的數據格式以下: // {"accessKeyId":"STS.iA645eTOXEqP3cg3VeHf", // "accessKeySecret":"rV3VQrpFQ4BsyHSAvi5NVLpPIVffDJv4LojUBZCf", // "expiration":"2015-11-03T09:52:59Z[;", // "federatedUser":"335450541522398178:alice-001", // "requestId":"C0E01B94-332E-4582-87F9-B857C807EE52", // "securityToken":"CAES7QIIARKAAZPlqaN9ILiQZPS+JDkS/GSZN45RLx4YS/p3OgaUC+oJl3XSlbJ7StKpQp1Q3KtZVCeAKAYY6HYSFOa6rU0bltFXAPyW+jvlijGKLezJs0AcIvP5a4ki6yHWovkbPYNnFSOhOmCGMmXKIkhrRSHMGYJRj8AIUvICAbDhzryeNHvUGhhTVFMuaUE2NDVlVE9YRXFQM2NnM1ZlSGYiEjMzNTQ1MDU0MTUyMjM5ODE3OCoJYWxpY2UtMDAxMOG/g7v6KToGUnNhTUQ1QloKATEaVQoFQWxsb3cSHwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aBwoFb3NzOioSKwoOUmVzb3VyY2VFcXVhbHMSCFJlc291cmNlGg8KDWFjczpvc3M6KjoqOipKEDEwNzI2MDc4NDc4NjM4ODhSAFoPQXNzdW1lZFJvbGVVc2VyYABqEjMzNTQ1MDU0MTUyMjM5ODE3OHIHeHljLTAwMQ=="} /* id<OSSCredentialProvider> credential2 = [[OSSFederationCredentialProvider alloc] initWithFederationTokenGetter:^OSSFederationToken * { NSURL * url = [NSURL URLWithString:@"http://localhost:8080/distribute-token.json"]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; OSSTaskCompletionSource * tcs = [OSSTaskCompletionSource taskCompletionSource]; NSURLSession * session = [NSURLSession sharedSession]; NSURLSessionTask * sessionTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { [tcs setError:error]; return; } [tcs setResult:data]; }]; [sessionTask resume]; [tcs.task waitUntilFinished]; if (tcs.task.error) { NSLog(@"get token error: %@", tcs.task.error); return nil; } else { NSDictionary * object = [NSJSONSerialization JSONObjectWithData:tcs.task.result options:kNilOptions error:nil]; OSSFederationToken * token = [OSSFederationToken new]; token.tAccessKey = [object objectForKey:@"accessKeyId"]; token.tSecretKey = [object objectForKey:@"accessKeySecret"]; token.tToken = [object objectForKey:@"securityToken"]; token.expirationTimeInGMTFormat = [object objectForKey:@"expiration"]; NSLog(@"get token: %@", token); return token; } }]; */ OSSClientConfiguration * conf = [OSSClientConfiguration new]; conf.maxRetryCount = 2; conf.timeoutIntervalForRequest = 30; conf.timeoutIntervalForResource = 24 * 60 * 60; client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential clientConfiguration:conf]; } // 異步上傳 - (void)uploadObjectAsync { OSSPutObjectRequest * put = [OSSPutObjectRequest new]; // required fields put.bucketName = bucketName; NSString *imageName = [imageTemp stringByAppendingPathComponent:[[NSUUID UUID].UUIDString stringByAppendingString:@".jpg"]]; put.objectKey = @"testImage.jpg"; UIImage *image = [UIImage imageNamed:@"test.jpg"]; NSData *data = UIImageJPEGRepresentation(image, 0.3); put.uploadingData = data; // put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend); // }; put.contentType = @""; put.contentMd5 = @""; put.contentEncoding = @""; put.contentDisposition = @""; OSSTask * putTask = [client putObject:put]; [putTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", put.objectKey); if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil; }]; }