使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)