使用 AWSS3GetBucketLocationRequest 获取存储桶区域
Posted
技术标签:
【中文标题】使用 AWSS3GetBucketLocationRequest 获取存储桶区域【英文标题】:Get region of bucket using AWSS3GetBucketLocationRequest 【发布时间】:2014-07-17 15:54:39 【问题描述】:我似乎无法理解如何最好地处理几个 AWS SDK ios v2 方法的 BFTask(Bolts 框架)返回对象。我正在尝试获取我的存储桶所在区域的名称。鉴于我从以下代码中成功接收到的 locationConstraint 信息,有人可以建议如何做到这一点吗?还是有一种通用的方法来理解 task.result 对象包含的内容?
AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new];
AWSS3 *myS3 = [[AWSS3 alloc] initWithConfiguration:self.configurationS3];
AWSS3GetBucketLocationRequest *locReq = [AWSS3GetBucketLocationRequest new];
locReq.bucket=@"testAWS";
[[myS3 getBucketLocation:locReq] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task)
if(task.error != nil)
NSLog(@"%s Location not found: [%@]",__PRETTY_FUNCTION__, task.error);
else
NSLog(@"Location found: [%@] - %li", task.result, [task.result locationConstraint]);
return nil;
];
另外,如果有人对最好的理解 BFTask 的教程/示例有建议,那将是有帮助的。谢谢你的帮助。干杯,特隆德 附言。我也在AWS support site上问过这个问题。
【问题讨论】:
我没有看到您在哪里向我们提供了您成功获取的locationConstraint
信息示例。
我的 locationConstraint 始终为 0,正如 Yosuke 在他的回答中所说的那样。我担心的是如何将数值转换为标识区域的字符串。但是,我同意我应该按照您的建议提供更多信息。
【参考方案1】:
这里是确定桶位置的代码sn-p:
AWSS3 *s3 = [AWSS3 defaultS3];
AWSS3GetBucketLocationRequest *getBucketLocationRequest = [AWSS3GetBucketLocationRequest new];
getBucketLocationRequest.bucket = testBucketNameGeneral;
[[s3 getBucketLocation:getBucketLocationRequest] continueWithBlock:^id(BFTask *task)
if(task.error != nil)
XCTAssertNil(task.error, @"The request failed. error: [%@]", task.error);
AWSS3GetBucketLocationOutput *getBucketLocationOutput = task.result;
XCTAssertEqual(getBucketLocationOutput.locationConstraint, AWSS3BucketLocationConstraintBlank);
switch (getBucketLocationOutput.locationConstraint)
case AWSS3BucketLocationConstraintBlank:
NSLog(@"Classic Region");
break;
case AWSS3BucketLocationConstraintEU:
NSLog(@"EU");
break;
case AWSS3BucketLocationConstraintEUWest1:
NSLog(@"eu-west-1");
break;
case AWSS3BucketLocationConstraintUSWest1:
NSLog(@"us-west-1");
break;
case AWSS3BucketLocationConstraintUSWest2:
NSLog(@"us-west-2");
break;
case AWSS3BucketLocationConstraintAPSoutheast1:
NSLog(@"ap-southeast-1");
break;
case AWSS3BucketLocationConstraintAPSoutheast2:
NSLog(@"ap-southeast-2");
break;
case AWSS3BucketLocationConstraintAPNortheast1:
NSLog(@"ap-northeast-1");
case AWSS3BucketLocationConstraintSAEast1:
NSLog(@"sa-east-1");
break;
case AWSS3BucketLocationConstraintUnknown:
default:
// Error
break;
return nil;
];
但是,SDK 中存在一个错误,getBucketLocationOutput.locationConstraint
始终为AWSS3BucketLocationConstraintUnknown
。我们正在努力修复。
Bolts-iOS GitHub repo 有一个很好的关于如何使用螺栓的说明。
希望这会有所帮助,
更新
适用于 iOS 2.0.4 的 AWS 移动开发工具包已发布。此更新修复了该问题,现在它返回了正确的locationConstraint
。
【讨论】:
以上是关于使用 AWSS3GetBucketLocationRequest 获取存储桶区域的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)