首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GO中使用AWS V2上传图像失败

在GO中使用AWS V2上传图像失败
EN

Stack Overflow用户
提问于 2021-06-21 11:58:50
回答 1查看 805关注 0票数 1

我正在使用AWS S3服务上传图像。昨天,我将SDK v1更新为v2,发现图像上传失败,有以下错误:

代码语言:javascript
复制
operation error S3: PutObject, https response error StatusCode: 403, RequestID: XXXXXXXXXXX, HostID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, api error SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.

更新的:我的主文件夹上有.aws文件夹中的aws凭证,格式如下:

代码语言:javascript
复制
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx

以下是代码:

代码语言:javascript
复制
package main

import (
    "context"
    "fmt"
    "io"
    "net/http"

    "github.com/aws/aws-sdk-go-v2/aws"
    awsconfig "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/feature/s3/manager"
    "github.com/aws/aws-sdk-go-v2/service/s3"
)

func main() {
    fileName := "test123.jpg"
    filePath := "/BUCKET_NAME/uploads/aman/2021/6/25/"

    res, err := http.Get("https://images.app.goo.gl/mpQ5nXYXjdUMKGgW7")
    if err != nil || res.StatusCode != 200 {
        // handle errors
    }
    defer res.Body.Close()
    UploadFileInS3Bucket(res.Body, fileName, filePath)
}

func UploadFileInS3Bucket(file io.Reader, fileName, filePath string) {
    cfg, err := awsconfig.LoadDefaultConfig(context.TODO(),
        awsconfig.WithRegion("REGION"),
    )
    client := s3.NewFromConfig(cfg)
    uploader := manager.NewUploader(client)
    uploadResp, err := uploader.Upload(context.TODO(), &s3.PutObjectInput{
        Bucket:      aws.String(filePath),
        Key:         aws.String(fileName),
        Body:        file,
        ContentType: aws.String("image"),
    })
    fmt.Println(uploadResp)
    fmt.Println(err)
}

如果我使用SDK code.However运行代码,那么它工作得很好&图像正在上传,我没有在我的code.However中更改任何凭据/桶/区域。

SDK v2出了什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 11:48:01

在花了几天时间之后,我了解到SDK V2采用了如下的Bucket & Key字段格式:

代码语言:javascript
复制
fileName := "uploads/2021/6/25/test123.jpg"
filePath := "BUCKET_NAME"

基本上,对于这些字段,SDK、V1和V2中的行为反之亦然。上面是V2。下面是V1:

代码语言:javascript
复制
fileName := "test123.jpg"
filePath := "/BUCKET_NAME/uploads/2021/6/25/"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68067571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档