我试图用AWS-SDK-Core Ruby Gem删除上传的图像文件。
我有以下代码:
require 'aws-sdk-core'
def pull_picture(picture)
Aws.config = {
:access_key_id => ENV["AWS_ACCESS_KEY_ID"],
:secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
:region => 'us-west-2'
}
s3 = Aws::S3::Client.new
test = s3.get_object(
:bucket => ENV["AWS_S3_BUCKET"],
:key => picture.image_url.split('/')[-2],
)
end
然而,我得到以下错误:
您试图访问的桶必须使用指定的端点进行寻址。请将所有将来的请求发送到此端点。
我知道这个区域是正确的,因为如果我把它改为us-east-1,会出现以下错误:
指定的密钥不存在。
我哪里做错了?
我也犯了同样的错误。当s3客户端创建的端点与创建桶时设置的端点不同时,就会发生这种情况。
错误码-桶设置与东部地区。
s3Client = New AmazonS3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USWest2)
修复
s3Client = New AmazonS3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.USEast1)
在c#中,你可以做以下检查,我假设类似的代码在其他sdk中是可能的:
var client = new AmazonS3Client(
credentials.AccessKey,
credentials.ClientSecret,
new AmazonS3Config{}
);
var bucketLocationRequest = new GetBucketLocationRequest
{
BucketName = amazonS3Bucket.BucketName
};
var response = await client.GetBucketLocationAsync(bucketLocationRequest);
var region = response.Location;
var regionEndpoint = region != null ? RegionEndpoint.GetBySystemName(region.Value) : RegionEndpoint.EUCentral1;
var clientWithRegion = new AmazonS3Client(
credentials.AccessKey,
credentials.ClientSecret,
new AmazonS3Config
{
RegionEndpoint = regionEndpoint
}
);