我已经使用 Swift soto包成功实现了一个 Amazon Web Service S3 存储应用程序。
我这样创建S3
服务对象:
func s3Maker() -> S3
{
return S3(client: client, region: Region(rawValue: awsConfiguration.region), endpoint: awsConfiguration.endpoint, timeout: commandTimeout)
}
使用 AWS 时,awsConfiguration.region
是 AWS 的标准区域名称之一(在本例中为"us-west-2"
),并且.endpoint
是nil
(它告诉 soto 使用标准的“amazonaws.com”域)。
一切都很好。
我现在想重用此代码与模拟 AWS S3 API 的非 AWS 提供商(从 BackBlaze 开始)进行通信。我的理解是,您只需在服务对象创建期间更改端点和区域。
我有一个awsConfiguration
对象的子类,它只是具有不同的region
( "us-west-000"
) 和endpoint
( "backblazeb2.com"
) 属性值,但它不起作用。
当代码运行时,它无法获取存储桶中的对象列表,返回错误:“无法读取存储桶内容”
为了调试它,我运行了 Fiddler Everywhere 来监控从我的机器发送的 HTTP 请求。当我运行 AWS 版本时,我看到两个 HTTPS 请求:http://qr3dev1.s3.us-west-2.amazonaws.com:443
和https://qr3dev1.s3.us-west-2.amazonaws.com/?list-type=2
,它们都成功了。
但是当我将区域和端点更改为 BackBlaze 时,代码什么也不做。Soto 从不发送任何 HTTP 请求。代码只是返回错误。
有没有人遇到过这种情况,知道如何调试它,或者知道让 soto 与非 AWS 服务通信的秘密?