Amazon web services AWS S3 Golang SDK-上传文件-错误区域
我遇到了一个问题,我试图通过官方的Golang AWS SDK将文件上传到S3 我的目标是一个指定位于北加利福尼亚州地区(us-west-1)的水桶。我可以在S3浏览器中看到它;但是,当我运行put操作时,会出现以下错误:Amazon web services AWS S3 Golang SDK-上传文件-错误区域,amazon-web-services,go,amazon-s3,Amazon Web Services,Go,Amazon S3,我遇到了一个问题,我试图通过官方的Golang AWS SDK将文件上传到S3 我的目标是一个指定位于北加利福尼亚州地区(us-west-1)的水桶。我可以在S3浏览器中看到它;但是,当我运行put操作时,会出现以下错误: BucketRegionError: incorrect region, the bucket is not in 'Northern California' region 以下是我设置连接的方式: creds := credentials.NewStaticCredent
BucketRegionError: incorrect region, the bucket is not in 'Northern California' region
以下是我设置连接的方式:
creds := credentials.NewStaticCredentials(aws_access_key_id, aws_secret_access_key, token)
_,err := creds.Get()
config := &aws.Config{
Region :aws.String("us-west-1"),
Endpoint :aws.String("s3.amazonaws.com"),
S3ForcePathStyle:aws.Bool(true),
Credentials :creds,
//LogLevel :0,
}
s3_client := s3.New(session.New(config))
params := &s3.PutObjectInput{
Bucket :aws.String(p_bucket_name_str),
Key :aws.String(p_target_file__s3_path_str),
ACL :aws.String("public-read"),
Body :file_bytes,
ContentLength:aws.Int64(size),
ContentType :aws.String(file_type),
Metadata :map[string]*string{
"Key":aws.String("MetadataValue"),
},
}
result,err := p_s3_client.PutObject(params)
任何建议或修复都会有很大的帮助,谢谢。aws sdk go提供了一个工具,使这项工作更加方便。您可以上传如下文件:
creds := credentials.NewStaticCredentials(AccessKey, SecretKey, "")
sess := session.New(&aws.Config{
Credentials: creds,
Region: &Region,
})
uploader := s3manager.NewUploader(sess)
uploader.Upload(&s3manager.UploadInput{
ACL: aws.String(acl),
Bucket: aws.String(bucket),
Key: aws.String(key),
ContentType: aws.String(contentType),
Body: r,
})
aws sdk go提供了一个工具,使这项工作更加方便。您可以上传如下文件:
creds := credentials.NewStaticCredentials(AccessKey, SecretKey, "")
sess := session.New(&aws.Config{
Credentials: creds,
Region: &Region,
})
uploader := s3manager.NewUploader(sess)
uploader.Upload(&s3manager.UploadInput{
ACL: aws.String(acl),
Bucket: aws.String(bucket),
Key: aws.String(key),
ContentType: aws.String(contentType),
Body: r,
})
您看到此错误是因为您认为您的bucket存在于
us-west-1
地区,并且您的请求正在向us-east-1
地区发出。对于AWS SDK For Go,端点s3.amazon.com
映射到us-east-1
区域
使用curl命令curl-I“https://.s3.amazonaws.com“
用标题x-amz-bucket-region
一旦您拥有正确的区域,从配置中删除端点
值,您的请求就会开始工作。SDK将根据提供的区域自动确定端点URL。Endpoint
值覆盖SDK将查找服务的URL
当bucket位于不同的区域时,SDK不会自动切换区域并在向
s3.amazon.com
端点发出请求时重新发送请求。您看到此错误是因为您认为您的bucket位于us-west-1
区域,您的请求正在向us-east-1
地区提出。对于AWS SDK For Go,端点s3.amazon.com
映射到us-east-1
区域
使用curl命令curl-I“https://.s3.amazonaws.com“
用标题x-amz-bucket-region
一旦您拥有正确的区域,从配置中删除端点
值,您的请求就会开始工作。SDK将根据提供的区域自动确定端点URL。Endpoint
值覆盖SDK将查找服务的URL
当bucket位于不同的区域时,SDK不会自动切换区域并在向
s3.amazon.com
端点发出请求时重新发送请求。错误是由于端点。默认情况下,端点“s3.amazonaws.com
”用于us-east-1
地区。如果要为us-west-1
创建bucket,必须将端点设置为“s3-us-west-1.amazonaws.com
”错误是因为端点。默认情况下,端点“s3.amazonaws.com
”用于us-east-1
地区。如果你想为us-west-1
创建bucket,你必须将端点设置为“s3-us-west-1.amazonaws.com
”你真的真的确定你的bucket在us-west-1吗?在AWS web工具的bucket仪表板上,它告诉我北加利福尼亚。。。我查了亚马逊的表格,北加州的地图指向美国西部1号。这也是通过web浏览器访问bucket文件时URL模式中的区域…我尝试了us-west-1、us-west-2、us-east-1区域,这三个区域都返回相同的响应“BucketRegionError:Error region,bucket不在'us-west-1'区域”(区域为us-west-1/us-west-2/us-east-1)我仍然相信您在web工具中查找Bucket位置时犯了一些错误。作为第一步,我将通过GetBucketLocation检查go代码中的bucket位置。您可以使用以下命令通过curl验证任何bucket的区域:curl-i“https://.s3.amazonaws.com返回的标题“x-amz-bucket-region”将说明bucket所在的区域。您真的,真的确定你的bucket在us-west-1吗?在AWS web工具的bucket仪表板中,它告诉我北加州。。。我查了亚马逊的表格,北加州的地图指向美国西部1号。这也是通过web浏览器访问bucket文件时URL模式中的区域…我尝试了us-west-1、us-west-2、us-east-1区域,这三个区域都返回相同的响应“BucketRegionError:Error region,bucket不在'us-west-1'区域”(区域为us-west-1/us-west-2/us-east-1)我仍然相信您在web工具中查找Bucket位置时犯了一些错误。作为第一步,我将通过GetBucketLocation检查go代码中的bucket位置。您可以使用以下命令通过curl验证任何bucket的区域:curl-i“https://.s3.amazonaws.com返回的标题“x-amz-bucket-region”将说明bucket所在的区域。我今天介绍了这个方法,虽然它确实减少了所需的代码量,但仍然返回相同的错误响应:(我今天使用了这个方法,虽然它确实减少了所需的代码量,但它仍然返回相同的错误响应:(