先谢谢了。 我打算在不同的国家/地区发布应用, 在其中将为用户提供选择国家的选项,并根据选择使用他们各自的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区域的正确方法是什么?
答案 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 ()