YBStorageObj.m 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  1. //
  2. // YBStorageObj.m
  3. // YBVideo
  4. //
  5. // Created by YB007 on 2019/11/22.
  6. // Copyright © 2019 cat. All rights reserved.
  7. //
  8. #import "YBStorageObj.h"
  9. #import "StorageConfig.h"
  10. #import <QCloudCOSXML/QCloudCOSXML.h>
  11. #import <Qiniu/QiniuSDK.h>
  12. #import <AWSS3/AWSS3.h>
  13. #import <AWSS3/AWSS3TransferUtility.h>
  14. typedef NS_ENUM(NSInteger,StorageType) {
  15. StorageType_Image, //图片
  16. StorageType_File, //音、视频
  17. };
  18. @interface YBStorageObj()<QCloudSignatureProvider>
  19. @end
  20. @implementation YBStorageObj
  21. static YBStorageObj *storageManeger = nil;
  22. +(instancetype)storageManeger {
  23. static dispatch_once_t onceToken;
  24. dispatch_once(&onceToken, ^{
  25. storageManeger = [[super allocWithZone:NULL]init];
  26. });
  27. return storageManeger;
  28. }
  29. +(instancetype)allocWithZone:(struct _NSZone *)zone {
  30. return [self storageManeger];
  31. }
  32. #pragma mark - 第一步:获取存储类型(tx 、qiniu)
  33. -(void)getCOSType:(YBStorageTypeBlock)complete {
  34. NSDate *oldDate = [StorageConfig getResTime] ? [StorageConfig getResTime] : [NSDate date];
  35. NSDate *curDate = [NSDate date];
  36. NSTimeInterval timeInterval = [curDate timeIntervalSinceDate:oldDate];
  37. [MBProgressHUD showMessage:@""];
  38. YBWeakSelf;
  39. //这里过期时间默认 10 分钟,不建议改特别大的值(七牛存储token有过期时间,这个时间一定要小于七牛的过期时间)
  40. if (![StorageConfig getResTime] || timeInterval > 600) {
  41. //说明没有存储过或者超过10分钟、获取存储类型(如果是七牛顺带获取token)
  42. [YBNetworking postWithUrl:@"Video.getCosInfo" Dic:@{} Suc:^(int code, id info, NSString *msg) {
  43. // [MBProgressHUD hideHUD];
  44. if (code == 0) {
  45. NSDictionary *infoDic = [info firstObject];
  46. //保留存储时间、存储类型
  47. [StorageConfig saveResTime:[NSDate date]];
  48. NSString *cloudType = minstr([infoDic valueForKey:@"cloudtype"]);
  49. [StorageConfig saveStorageType:minstr([infoDic valueForKey:@"cloudtype"])];
  50. //【七牛基本信息】
  51. NSDictionary *qnInfo = @{};
  52. if ([[infoDic valueForKey:@"qiniuInfo"] isKindOfClass:[NSDictionary class]]) {
  53. qnInfo = [infoDic valueForKey:@"qiniuInfo"];
  54. [StorageConfig saveQNToken:minstr([qnInfo valueForKey:@"qiniuToken"])];
  55. [StorageConfig saveQNDomain:minstr([qnInfo valueForKey:@"qiniu_domain"])];
  56. [StorageConfig saveQNZone:minstr([qnInfo valueForKey:@"qiniu_zone"])];
  57. }
  58. //【亚马逊基本信息】
  59. NSDictionary *awsInfo = @{};
  60. if ([[infoDic valueForKey:@"awsInfo"] isKindOfClass:[NSDictionary class]]) {
  61. awsInfo = [infoDic valueForKey:@"awsInfo"];
  62. [StorageConfig saveAwsBucket:minstr([awsInfo valueForKey:@"aws_bucket"])];
  63. [StorageConfig saveAwsRegion:minstr([awsInfo valueForKey:@"aws_region"])];
  64. [StorageConfig saveAwsIdentityPoolid:minstr([awsInfo valueForKey:@"aws_identitypoolid"])];
  65. }
  66. if ([[infoDic valueForKey:@"txCloudInfo"] isKindOfClass:[NSDictionary class]]) {
  67. NSDictionary *txInfo = [infoDic valueForKey:@"txCloudInfo"];
  68. [StorageConfig saveTXRegion:minstr([txInfo valueForKey:@"region"])];
  69. [StorageConfig saveTXBucket:minstr([txInfo valueForKey:@"bucket"])];
  70. [StorageConfig saveTXAppID:minstr([txInfo valueForKey:@"appid"])];
  71. }
  72. //基本信息验证
  73. if ([cloudType isEqual:@"aws"]) {
  74. //亚马逊
  75. if ([PublicObj checkNull:minstr([awsInfo valueForKey:@"aws_bucket"])] ||
  76. [PublicObj checkNull:minstr([awsInfo valueForKey:@"aws_region"])] ||
  77. [PublicObj checkNull:minstr([awsInfo valueForKey:@"aws_identitypoolid"])]) {
  78. if (complete) {
  79. complete(-1);
  80. }
  81. [MBProgressHUD showError:YZMsg(@"亚马逊存储配置有误")];
  82. }else {
  83. [weakSelf yb_awsInitialization];
  84. if (complete) {
  85. complete(0);
  86. }
  87. }
  88. }else if ([cloudType isEqual:@"tx"]) {
  89. if (complete) {
  90. [weakSelf txInit];
  91. complete(0);
  92. }
  93. } else{
  94. //七牛
  95. if ([PublicObj checkNull:minstr([qnInfo valueForKey:@"qiniuToken"])] ||
  96. [PublicObj checkNull:minstr([qnInfo valueForKey:@"qiniu_zone"])]) {
  97. if (complete) {
  98. complete(-1);
  99. }
  100. [MBProgressHUD showError:YZMsg(@"七牛存储配置有误")];
  101. }else {
  102. if (complete) {
  103. complete(0);
  104. }
  105. }
  106. }
  107. }else {
  108. if (complete) {
  109. complete(-1);
  110. }
  111. [MBProgressHUD hideHUD];
  112. [MBProgressHUD showPop:msg];
  113. }
  114. } Fail:^(id fail) {
  115. [MBProgressHUD hideHUD];
  116. if (complete) {
  117. complete(-2);
  118. }
  119. }];
  120. }else {
  121. //10分钟内不请求接口,使用本地存贮的值
  122. [MBProgressHUD hideHUD];
  123. if (complete) {
  124. [weakSelf txInit];
  125. complete(0);
  126. }
  127. }
  128. }
  129. #pragma mark - 第二步:开始上传(tx 、qiniu)
  130. //图片
  131. -(void)yb_storageImg:(UIImage *)img andName:(NSString *)imgName progress:(YBStoragePercentBlock)ybprogress complete:(YBStorageFinishaBlock)complete{
  132. NSString *cloudType = minstr([StorageConfig getStorageType]);
  133. NSData *thumbData = UIImagePNGRepresentation(img);
  134. if ([cloudType isEqual:@"aws"]) {
  135. //亚马逊
  136. AWSS3TransferUtilityUploadCompletionHandlerBlock completionHandler = ^(AWSS3TransferUtilityUploadTask *task, NSError *error) {
  137. if (error) {
  138. NSLog(@"uploadfail:%@",error);
  139. if (complete) {
  140. complete(-1,@"");
  141. }
  142. } else {
  143. NSLog(@"uploadSur:%@",task.key);
  144. if (complete) {
  145. NSString *taskey = [NSString stringWithFormat:@"%@",task.key];
  146. complete(0,taskey);
  147. }
  148. }
  149. };
  150. AWSS3TransferUtilityUploadExpression *expression = [AWSS3TransferUtilityUploadExpression new];
  151. expression.progressBlock = ^(AWSS3TransferUtilityTask *task, NSProgress *progress) {
  152. if (ybprogress) {
  153. ybprogress(progress.fractionCompleted);
  154. }
  155. NSLog(@"pro:%f",progress.fractionCompleted);
  156. };
  157. AWSS3TransferUtility *transferUtility = [AWSS3TransferUtility defaultS3TransferUtility];
  158. [[transferUtility uploadData:thumbData bucket:[StorageConfig getAwsBucket] key:imgName contentType:@"image/png" expression:expression completionHandler:completionHandler] continueWithBlock:^id _Nullable(AWSTask<AWSS3TransferUtilityUploadTask *> * _Nonnull t) {
  159. if (t.error) {
  160. NSLog(@"Error: %@", t.error);
  161. if (complete) {
  162. complete(-1,@"");
  163. }
  164. }
  165. if (t.result) {
  166. AWSS3TransferUtilityUploadTask *uploadTask = t.result;
  167. // Do something with uploadTask.
  168. NSLog(@"restult:%@",uploadTask);
  169. }
  170. return nil;
  171. }];
  172. }else if ([cloudType isEqual:@"tx"]) {
  173. //腾讯
  174. QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];
  175. put.object = imgName;//[NSString stringWithFormat:@"dspdemo/%@",imgName];
  176. put.bucket = minstr([StorageConfig getTXBucket]);
  177. put.body = thumbData;
  178. [put setSendProcessBlock:^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) {
  179. //NSLog(@"rk;;upload %lld totalSend %lld aim %lld", bytesSent, totalBytesSent, totalBytesExpectedToSend);
  180. if (ybprogress) {
  181. ybprogress((CGFloat)totalBytesSent/totalBytesExpectedToSend);
  182. }
  183. }];
  184. [put setFinishBlock:^(id outputObject, NSError* error) {
  185. QCloudUploadObjectResult *rst = outputObject;
  186. NSLog(@"rk;;111111:\nlocation:%@\n%@",rst.location,rst.key);
  187. if (error) {
  188. //失败
  189. if (complete) {
  190. complete(-1,@"");
  191. }
  192. }else{
  193. //成功
  194. if (complete) {
  195. complete(0,rst.key);
  196. }
  197. }
  198. }];
  199. [[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];
  200. }else {
  201. //七牛
  202. QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
  203. builder.zone = [self getQNZone];
  204. }];
  205. QNUploadOption *option = [[QNUploadOption alloc]initWithMime:nil progressHandler:^(NSString *key, float percent) {
  206. //NSLog(@"=====%@9999:%f",imgName,percent);
  207. if (ybprogress) {
  208. ybprogress(percent);
  209. }
  210. } params:nil checkCrc:NO cancellationSignal:nil];
  211. QNUploadManager *upManager = [[QNUploadManager alloc] initWithConfiguration:config];
  212. [upManager putData:thumbData key:imgName token:minstr([StorageConfig getQNToken]) complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
  213. NSLog(@"info ===== %@ \n resp ===== %@", info,resp);
  214. if (info.ok) {
  215. //成功
  216. if (complete) {
  217. complete(0,key);
  218. }
  219. }else {
  220. //失败
  221. if (complete) {
  222. complete(-1,@"");
  223. }
  224. }
  225. } option:option];
  226. }
  227. }
  228. //音、视频
  229. -(void)yb_storageVideoOrVoice:(NSString *)filePath andName:(NSString *)fileName progress:(YBStoragePercentBlock)ybprogress complete:(YBStorageFinishaBlock)complete{
  230. NSString *cloudType = minstr([StorageConfig getStorageType]);
  231. if ([cloudType isEqual:@"aws"]) {
  232. //亚马逊
  233. NSString *mineType = @"video/mp4";
  234. if ([filePath hasSuffix:@".m4a"]) {
  235. mineType = @"audio/x-m4a";
  236. }else if ([filePath hasSuffix:@".wav"]){
  237. mineType = @"audio/wav";
  238. }
  239. AWSS3TransferUtilityUploadCompletionHandlerBlock completionHandler = ^(AWSS3TransferUtilityUploadTask *task, NSError *error) {
  240. if (error) {
  241. NSLog(@"uploadfail:%@",error);
  242. if (complete) {
  243. complete(-1,@"");
  244. }
  245. } else {
  246. NSLog(@"uploadSur:%@",task.key);
  247. if (complete) {
  248. NSString *taskey = [NSString stringWithFormat:@"%@",task.key];
  249. complete(0,taskey);//task.key
  250. }
  251. }
  252. };
  253. AWSS3TransferUtilityUploadExpression *expression = [AWSS3TransferUtilityUploadExpression new];
  254. expression.progressBlock = ^(AWSS3TransferUtilityTask *task, NSProgress *progress) {
  255. if (ybprogress) {
  256. ybprogress(progress.fractionCompleted);
  257. }
  258. NSLog(@"pro:%f",progress.fractionCompleted);
  259. };
  260. AWSS3TransferUtility *transferUtility = [AWSS3TransferUtility defaultS3TransferUtility];
  261. [[transferUtility uploadFile:[NSURL URLWithString:filePath] bucket:[StorageConfig getAwsBucket] key:fileName contentType:mineType expression:expression completionHandler:completionHandler] continueWithBlock:^id _Nullable(AWSTask<AWSS3TransferUtilityUploadTask *> * _Nonnull t) {
  262. if (t.error) {
  263. NSLog(@"Error: %@", t.error);
  264. if (complete) {
  265. complete(-1,@"");
  266. }
  267. }
  268. if (t.result) {
  269. AWSS3TransferUtilityUploadTask *uploadTask = t.result;
  270. // Do something with uploadTask.
  271. NSLog(@"restult:%@",uploadTask);
  272. }
  273. return nil;
  274. }];
  275. }else if ([cloudType isEqual:@"tx"]) {
  276. //腾讯
  277. QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];
  278. NSURL* pathUrl = [NSURL fileURLWithPath:filePath];
  279. put.object = fileName;
  280. put.bucket = minstr([StorageConfig getTXBucket]);
  281. put.body = pathUrl;
  282. [put setSendProcessBlock:^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) {
  283. //NSLog(@"%@rk;;upload %lld totalSend %lld aim %lld",fileName, bytesSent, totalBytesSent, totalBytesExpectedToSend);
  284. if (ybprogress) {
  285. ybprogress((CGFloat)totalBytesSent/totalBytesExpectedToSend);
  286. }
  287. }];
  288. [put setFinishBlock:^(id outputObject, NSError* error) {
  289. QCloudUploadObjectResult *rst = outputObject;
  290. NSLog(@"rk;;111111:\nlocation:%@\n%@",rst.location,rst.key);
  291. if (error) {
  292. //失败
  293. if (complete) {
  294. complete(-1,@"");
  295. }
  296. }else{
  297. //成功
  298. if (complete) {
  299. complete(0,rst.key);
  300. }
  301. }
  302. }];
  303. [[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];
  304. }else {
  305. //七牛
  306. QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
  307. builder.zone = [self getQNZone];
  308. }];
  309. QNUploadOption *option = [[QNUploadOption alloc]initWithMime:nil progressHandler:^(NSString *key, float percent) {
  310. //NSLog(@"=====%@9999:%f",fileName,percent);
  311. if (ybprogress) {
  312. ybprogress(percent);
  313. }
  314. } params:nil checkCrc:NO cancellationSignal:nil];
  315. QNUploadManager *upManager = [[QNUploadManager alloc] initWithConfiguration:config];
  316. [upManager putFile:filePath key:fileName token:minstr([StorageConfig getQNToken]) complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
  317. NSLog(@"info ===== %@ \n resp ===== %@", info,resp);
  318. if (info.ok) {
  319. //成功
  320. if (complete) {
  321. complete(0,key);
  322. }
  323. }else {
  324. //失败
  325. if (complete) {
  326. complete(-1,@"");
  327. }
  328. }
  329. } option:option];
  330. }
  331. }
  332. #pragma mark - 腾讯初始化、验证开始
  333. -(void)txInit {
  334. if (![[StorageConfig getStorageType] isEqual:@"tx"]) {
  335. return;
  336. }
  337. if ([PublicObj checkNull:[StorageConfig getTXAppID]] || [PublicObj checkNull:[StorageConfig getTXBucket]] ||[PublicObj checkNull:[StorageConfig getTXRegion]]) {
  338. dispatch_async(dispatch_get_main_queue(), ^{
  339. [MBProgressHUD showPop:YZMsg(@"腾讯云存储信息不完整")];
  340. });
  341. return;
  342. }
  343. QCloudServiceConfiguration* configuration = [QCloudServiceConfiguration new];
  344. configuration.appID = minstr([StorageConfig getTXAppID]);//@"1258210369";
  345. configuration.signatureProvider = self;
  346. QCloudCOSXMLEndPoint* endpoint = [[QCloudCOSXMLEndPoint alloc] init];
  347. endpoint.regionName = minstr([StorageConfig getTXRegion]);//@"ap-shanghai";
  348. configuration.endpoint = endpoint;
  349. [QCloudCOSXMLService registerDefaultCOSXMLWithConfiguration:configuration];
  350. [QCloudCOSTransferMangerService registerDefaultCOSTransferMangerWithConfiguration:configuration];
  351. }
  352. //腾讯验签
  353. - (void)signatureWithFields:(QCloudSignatureFields*)fileds request:(QCloudBizHTTPRequest*)request urlRequest:(NSMutableURLRequest*)urlRequst compelete:(QCloudHTTPAuthentationContinueBlock)continueBlock {
  354. //此接口代替原来的 8088 端口请求
  355. [YBNetworking postWithUrl:@"Video.getTxCosFederationToken" Dic:@{} Suc:^(int code, id info, NSString *msg) {
  356. if (code == 0) {
  357. NSDictionary *infoDic = [info firstObject];
  358. QCloudCredential* credential = [QCloudCredential new];
  359. credential.secretID = [NSString stringWithFormat:@"%@",[infoDic valueForKey:@"tmpSecretId"]];
  360. credential.secretKey = [NSString stringWithFormat:@"%@",[infoDic valueForKey:@"tmpSecretKey"]];
  361. credential.token = [NSString stringWithFormat:@"%@",[infoDic valueForKey:@"sessionToken"]];
  362. QCloudAuthentationV5Creator* creator = [[QCloudAuthentationV5Creator alloc] initWithCredential:credential];
  363. QCloudSignature* signature = [creator signatureForData:urlRequst];
  364. continueBlock(signature, nil);
  365. }else {
  366. dispatch_async(dispatch_get_main_queue(), ^{
  367. [MBProgressHUD showPop:msg];
  368. });
  369. }
  370. } Fail:nil];
  371. }
  372. #pragma mark - 腾讯初始化、验证结束
  373. #pragma makr - 七牛划分区域开始
  374. -(QNZone *)getQNZone{
  375. //华东:qiniu_hd 华北:qiniu_hb 华南:qiniu_hn 北美:qiniu_bm 新加坡:qiniu_xjp
  376. NSString *qnStr = minstr([StorageConfig getQNZone]);
  377. //华东
  378. QNZone *zone = [QNFixedZone zone0];
  379. if ([qnStr isEqual:@"qiniu_hb"]) {
  380. //华北
  381. zone = [QNFixedZone zone1];
  382. }else if ([qnStr isEqual:@"qiniu_hn"]){
  383. //华南
  384. zone = [QNFixedZone zone2];
  385. }else if ([qnStr isEqual:@"qiniu_bm"]){
  386. //北美
  387. zone = [QNFixedZone zoneNa0];
  388. }else if ([qnStr isEqual:@"qiniu_xjp"]){
  389. //新加坡
  390. zone = [QNFixedZone zoneAs0];
  391. }
  392. return zone;
  393. }
  394. #pragma makr - 七牛划分区域结束
  395. #pragma mark - 亚马逊扩展配置开始
  396. -(void)yb_awsInitialization {
  397. NSDictionary *infoDic = [NSBundle mainBundle].infoDictionary;
  398. NSDictionary *awsDic = @{@"CredentialsProvider":@{@"CognitoIdentity":@{@"Default":@{
  399. @"PoolId":[StorageConfig getAwsIdentityPoolid],
  400. @"Region":[StorageConfig getAwsRegion],
  401. }
  402. }
  403. },
  404. @"S3TransferUtility":@{@"Default":@{@"Region":[StorageConfig getAwsRegion]}}
  405. };
  406. [infoDic setValue:awsDic forKey:@"AWS"];
  407. NSLog(@"==info:%@",infoDic);
  408. //identityPoolId格式: @"ap-southeast-1:f972XXXX-cc7d-431a-80c6-581266daXXXX"
  409. AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:[self getAwsRegion] identityPoolId:[StorageConfig getAwsIdentityPoolid]];
  410. AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:[self getAwsRegion] credentialsProvider:credentialsProvider];
  411. AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
  412. }
  413. -(void)yb_awsTransferOfBackgroundWithApplication:(UIApplication *)application andIdentifier:(NSString *)identifier completion:(void (^)(void))completionHandler{
  414. [AWSS3TransferUtility interceptApplication:application handleEventsForBackgroundURLSession:identifier completionHandler:completionHandler];
  415. }
  416. -(AWSRegionType)getAwsRegion {
  417. NSString *awsStr = minstr([StorageConfig getAwsRegion]);
  418. if ([awsStr isEqual:@"AWSRegionUSEast1"]
  419. || [awsStr isEqual:@"USEast1"]
  420. || [awsStr isEqual:@"us-east-1"]) {
  421. return AWSRegionUSEast1;
  422. }
  423. if ([awsStr isEqual:@"AWSRegionUSEast2"]
  424. || [awsStr isEqual:@"USEast2"]
  425. || [awsStr isEqual:@"us-east-2"]) {
  426. return AWSRegionUSEast2;
  427. }
  428. if ([awsStr isEqual:@"AWSRegionUSWest1"]
  429. || [awsStr isEqual:@"USWest1"]
  430. || [awsStr isEqual:@"us-west-1"]) {
  431. return AWSRegionUSWest1;
  432. }
  433. if ([awsStr isEqual:@"AWSRegionUSWest2"]
  434. || [awsStr isEqual:@"USWest2"]
  435. || [awsStr isEqual:@"us-west-2"]) {
  436. return AWSRegionUSWest2;
  437. }
  438. if ([awsStr isEqual:@"AWSRegionEUWest1"]
  439. || [awsStr isEqual:@"EUWest1"]
  440. || [awsStr isEqual:@"eu-west-1"]) {
  441. return AWSRegionEUWest1;
  442. }
  443. if ([awsStr isEqual:@"AWSRegionEUWest2"]
  444. || [awsStr isEqual:@"EUWest2"]
  445. || [awsStr isEqual:@"eu-west-2"]) {
  446. return AWSRegionEUWest2;
  447. }
  448. if ([awsStr isEqual:@"AWSRegionEUCentral1"]
  449. || [awsStr isEqual:@"EUCentral1"]
  450. || [awsStr isEqual:@"eu-central-1"]) {
  451. return AWSRegionEUCentral1;
  452. }
  453. if ([awsStr isEqual:@"AWSRegionAPNortheast1"]
  454. || [awsStr isEqual:@"APNortheast1"]
  455. || [awsStr isEqual:@"ap-northeast-1"]) {
  456. return AWSRegionAPNortheast1;
  457. }
  458. if ([awsStr isEqual:@"AWSRegionAPNortheast2"]
  459. || [awsStr isEqual:@"APNortheast2"]
  460. || [awsStr isEqual:@"ap-northeast-2"]) {
  461. return AWSRegionAPNortheast2;
  462. }
  463. if ([awsStr isEqual:@"AWSRegionAPSoutheast1"]
  464. || [awsStr isEqual:@"APSoutheast1"]
  465. || [awsStr isEqual:@"ap-southeast-1"]) {
  466. return AWSRegionAPSoutheast1;
  467. }
  468. if ([awsStr isEqual:@"AWSRegionAPSoutheast2"]
  469. || [awsStr isEqual:@"APSoutheast2"]
  470. || [awsStr isEqual:@"ap-southeast-2"]) {
  471. return AWSRegionAPSoutheast2;
  472. }
  473. if ([awsStr isEqual:@"AWSRegionAPSouth1"]
  474. || [awsStr isEqual:@"APSouth1"]
  475. || [awsStr isEqual:@"ap-south-1"]) {
  476. return AWSRegionAPSouth1;
  477. }
  478. if ([awsStr isEqual:@"AWSRegionSAEast1"]
  479. || [awsStr isEqual:@"SAEast1"]
  480. || [awsStr isEqual:@"sa-east-1"]) {
  481. return AWSRegionSAEast1;
  482. }
  483. if ([awsStr isEqual:@"AWSRegionCACentral1"]
  484. || [awsStr isEqual:@"CACentral1"]
  485. || [awsStr isEqual:@"ca-central-1"]) {
  486. return AWSRegionCACentral1;
  487. }
  488. if ([awsStr isEqual:@"AWSRegionUSGovWest1"]
  489. || [awsStr isEqual:@"USGovWest1"]
  490. || [awsStr isEqual:@"us-gov-west-1"]) {
  491. return AWSRegionUSGovWest1;
  492. }
  493. if ([awsStr isEqual:@"AWSRegionCNNorth1"]
  494. || [awsStr isEqual:@"CNNorth1"]
  495. || [awsStr isEqual:@"cn-north-1"]) {
  496. return AWSRegionCNNorth1;
  497. }
  498. if ([awsStr isEqual:@"AWSRegionCNNorthWest1"]
  499. || [awsStr isEqual:@"CNNorthWest1"]
  500. || [awsStr isEqual:@"cn-northwest-1"]) {
  501. return AWSRegionCNNorthWest1;
  502. }
  503. if ([awsStr isEqual:@"AWSRegionEUWest3"]
  504. || [awsStr isEqual:@"EUWest3"]
  505. || [awsStr isEqual:@"eu-west-3"]) {
  506. return AWSRegionEUWest3;
  507. }
  508. if ([awsStr isEqual:@"AWSRegionUSGovEast1"]
  509. || [awsStr isEqual:@"USGovEast1"]
  510. || [awsStr isEqual:@"us-gov-east-1"]) {
  511. return AWSRegionUSGovEast1;
  512. }
  513. if ([awsStr isEqual:@"AWSRegionEUNorth1"]
  514. || [awsStr isEqual:@"EUNorth1"]
  515. || [awsStr isEqual:@"eu-north-1"]) {
  516. return AWSRegionEUNorth1;
  517. }
  518. if ([awsStr isEqual:@"AWSRegionAPEast1"]
  519. || [awsStr isEqual:@"APEast1"]
  520. || [awsStr isEqual:@"ap-east-1"]) {
  521. return AWSRegionAPEast1;
  522. }
  523. if ([awsStr isEqual:@"AWSRegionMESouth1"]
  524. || [awsStr isEqual:@"MESouth1"]
  525. || [awsStr isEqual:@"me-south-1"]) {
  526. return AWSRegionMESouth1;
  527. }
  528. if ([awsStr isEqual:@"AWSRegionAFSouth1"]
  529. || [awsStr isEqual:@"AFSouth1"]
  530. || [awsStr isEqual:@"af-south-1"]) {
  531. return AWSRegionAFSouth1;
  532. }
  533. if ([awsStr isEqual:@"AWSRegionEUSouth1"]
  534. || [awsStr isEqual:@"EUSouth1"]
  535. || [awsStr isEqual:@"eu-south-1"]) {
  536. return AWSRegionEUSouth1;
  537. }
  538. return AWSRegionUnknown;
  539. }
  540. #pragma mark - 亚马逊扩展配置结束
  541. @end