S3 golang 使用预签名 url 分段上传

Kun*_*num 5 amazon-s3 go aws-sdk

我们正在用“go”语言编写一个应用程序,其中我从我的服务生成一个预签名 URL(使用 PutObjectRequest() 和 Presign())并将其传递给外部服务,以便外部服务可以执行较大文件的分段上传S3(使用预先签名的 url)。我们不想将 AWS 凭证提供给外部服务,这就是我们计划提供预签名 URL 的原因。另外,由于文件很大,我们需要使用AWS SDK提供的分段上传功能。

我进行了快速搜索,但在 aws sdk 中找不到任何执行此操作的函数。适用于go语言的AWS sdk是否支持使用预签名url进行分段上传?有什么办法可以实现这一点吗?

Roy*_*rot -1

AWS Go SDK 文档提供了使用预签名 PUT URL 进行上传的详细示例:https: //docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-presigned-urls。 html

例如(从文档中复制相关部分)

    // Create S3 service client
    svc := s3.New(sess)

    resp, _ := svc.PutObjectRequest(&s3.PutObjectInput{
        Bucket: aws.String("testBucket"),
        Key:    aws.String("testKey"),
    })

    md5s := base64.StdEncoding.EncodeToString(h.Sum(nil))
    resp.HTTPRequest.Header.Set("Content-MD5", md5s)

    url, err := resp.Presign(15 * time.Minute)
    if err != nil {
        fmt.Println("error presigning request", err)
        return
    }

    req, err := http.NewRequest("PUT", url, strings.NewReader(""))
    req.Header.Set("Content-MD5", md5s)
    if err != nil {
        fmt.Println("error creating request", url)
        return
    }
Run Code Online (Sandbox Code Playgroud)