我最近一直在尝试编写代码来添加和删除Amazon S3存储桶中的内容。我是Amazon S3和AmazonWS .Net SDK的新手。
存储区域端点是http://sqs.eu-west-1.amazonaws.com所以我构建了我的客户端:
_s3Client = AWSClientFactory.CreateAmazonS3Client(accessKey, awsSecretKey, new AmazonS3Config().WithServiceURL("http://sqs.eu-west-1.amazonaws.com"));
如果我遗漏了AmazonS3Config位,我会收到此错误:
在没有新位置的情况下返回重定向。这可能是由 尝试以不同的名称访问名称中的句点的存储桶 区域然后客户端配置为。
当我输入AmazonS3Config位时,我不再收到该错误,但我似乎无法访问此存储桶或我通常可以访问的任何其他存储桶。我发送的任何请求都返回null。
我已经使用配置到标准美国地区的其他存储桶测试了我的代码,但一切运行良好。唯一的区别在于CreateAmazonS3Client方法,我在其中使用EU端点设置配置。
有人可以给我一些关于如何让我的客户在欧盟(爱尔兰)地区工作的指导。我一直在寻找几个小时,我所遵循的每个教程或文档到目前为止都没有工作。
答案 0 :(得分:15)
只需使用标准端点 - s3.amazonaws.com
AmazonS3Config S3Config = new AmazonS3Config {
ServiceURL = "s3.amazonaws.com",
CommunicationProtocol = Amazon.S3.Model.Protocol.HTTP
};
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWS_Key, AWS_SecretKey, S3Config);
PutObjectRequest UploadToS3Request = new PutObjectRequest();
UploadToS3Request.WithFilePath(localPath)
.WithBucketName(bucket)
.WithKey(key);
client.PutObject(UploadToS3Request);
答案 1 :(得分:4)
它可能仍然关注谁..
使用旧的AWS开发工具包(版本1),您只需创建没有区域或AmazonS3Config
的S3客户端。无需指定服务URL,它使用上面提到的默认值。您真正需要该区域与S3一起工作的唯一时间是您创建一个可能很少需要应用程序的存储桶。
这对我有用,我对S3执行的所有通信都是通过https。
使用适用于.Net的新AWS SDK(版本2及更高版本),似乎需要region参数,实际上AmazonS3Client
如果没有给出,则会抛出异常。我已尝试通过指定通用https://s3.amazonaws.com
网址来解决此限制并失败,因为新SDK不遵循默认(US-EAST-1 I think)端点的301重定向。
总而言之,最好指定区域,即使是旧的API,以避免将来破坏。如果您的应用程序正在进行跨区域调用,并且速度较慢(可能)且成本较高,那么您的代码可能最好证明这一点。