Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS S3 Golang SDK-上传文件-错误区域_Amazon Web Services_Go_Amazon S3 - Fatal编程技术网

Amazon web services AWS S3 Golang SDK-上传文件-错误区域

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

我遇到了一个问题,我试图通过官方的Golang AWS SDK将文件上传到S3

我的目标是一个指定位于北加利福尼亚州地区(us-west-1)的水桶。我可以在S3浏览器中看到它;但是,当我运行put操作时,会出现以下错误:

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所在的区域。我今天介绍了这个方法,虽然它确实减少了所需的代码量,但仍然返回相同的错误响应:(我今天使用了这个方法,虽然它确实减少了所需的代码量,但它仍然返回相同的错误响应:(