如何使用iOS SDK在运行时更改AWS区域?

时间:2019-06-25 15:57:16

标签: ios amazon-web-services amazon-s3 aws-sdk

先谢谢了。 我打算在不同的国家/地区发布应用, 在其中将为用户提供选择国家的选项,并根据选择使用他们各自的aws区域。

第一次登录可以正常工作,用户可以选择区域,S3上传可以正常工作。

但是如果用户注销,然后另一个用户使用其他区域登录,则s3上传将失败,并显示超时错误。

代码如下:

guard let config = AWSServiceConfiguration(region: regionTypeByString(regionString: userData.getS3RegionBasedOnSelection()), credentialsProvider: self.awsAuthenticationProvider) else { return }
AWSS3TransferUtility.register(with: config, forKey: "Transfer")

AWSS3TransferUtility.s3TransferUtility(forKey: "Transfer")?.uploadFile(
                fileUrl,
                bucket: bucketPath,
                key: key,
                contentType: "application/octet-stream",
                expression: expression,
                completionHandler: { (task, error) in

                    if error != nil {
                        DDLogInfo("!!!!!! Error RAW: \(String(describing: error))")
                        DDLogInfo("!!!!!! Error Code: \(error!.code)")
                        DDLogInfo("!!!!!! Error Description: \(error!.localizedDescription)")
                    }
                })

更改/切换s3区域的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

为每个区域创建一个配置并将其注册在相应的键下。 并在初始化AWSS3时执行相同的操作。

例如:

region1:

#include <range/v3/all.hpp>

template <typename T>
class It
{
private:
  class Proxy
  {
  private:
    T &x;

  public:
    Proxy(T &x_) : x(x_) {}

    operator T &() const { return x; }
  };

public:
  using value_type = T;

private:
  T x;

public:
  Proxy operator *() { return {x}; }
};

static_assert( ranges::Readable<It<bool>>{} );

region2:

let config = AWSServiceConfiguration(region: .USWest1, credentialsProvider: getAwsAuthenticationProvider())
AWSS3.register(with: config, forKey: "USWest1")
AWSS3TransferUtility.register(with: config, forKey: "USWest1")
//--> later in code
    let transferUtility = AWSS3TransferUtility.s3TransferUtility(forKey: "USWest1")
    transferUtility.uploadFile ()