为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 golang 从 AWS S3 下载

如何使用 golang 从 AWS S3 下载

Go
慕勒3428872 2023-06-01 18:22:41
我正在编写一个 go 函数来从 AWS S3 存储桶下载文件。func DownloadFromS3Bucket() {    bucket := "cellery-runtime-installation"    item := "hello-world.txt"    file, err := os.Create(item)    if err != nil {        fmt.Println(err)    }    defer file.Close()    // Initialize a session in us-west-2 that the SDK will use to load    // credentials from the shared credentials file ~/.aws/credentials.    sess, _ := session.NewSession(&aws.Config{        Region: aws.String("us-east-1")},    )    downloader := s3manager.NewDownloader(sess)    numBytes, err := downloader.Download(file,        &s3.GetObjectInput{            Bucket: aws.String(bucket),            Key:    aws.String(item),        })    if err != nil {        fmt.Println(err)    }    fmt.Println("Downloaded", file.Name(), numBytes, "bytes")}但是,我收到一条错误消息,要求提供凭据。NoCredentialProviders:链中没有有效的提供者。已弃用。有关详细消息,请参阅 aws.Config.CredentialsChainVerboseErrors该文档没有具体说明如何设置凭据。(访问密钥ID,秘密访问密钥)任何想法?
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

有几种方法可以设置凭据。

例如,您可以通过设置环境变量来指定它:

AWS_ACCESS_KEY = <your_access_key>
AWS_SECRET_KEY = <your_secret_key>

credentials.NewEnvCredentials()然后只需在您的配置实例中使用:

sess, _ := session.NewSession(&aws.Config{
    Region:      aws.String("us-east-1"),
    Credentials: credentials.NewEnvCredentials(),
})


查看完整回答
反对 回复 2023-06-01
?
ITMISS

TA贡献1871条经验 获得超8个赞

只需设置AWS_ACCESS_KEY和AWS_SECRET_KEY环境变量(您不需要调用credentials.NewEnvCredentials()-session.NewSession您所做的是完美的):


func DownloadFromS3Bucket() {

    

    os.Setenv("AWS_ACCESS_KEY","my-key")

    os.Setenv("AWS_SECRET_KEY","my-secret")


    bucket := "cellery-runtime-installation"

    item := "hello-world.txt"


    file, err := os.Create(item)

    if err != nil {

        fmt.Println(err)

    }

    defer file.Close()


    sess, _ := session.NewSession(&aws.Config{Region: aws.String("us-east-1")})

    downloader := s3manager.NewDownloader(sess)

    numBytes, err := downloader.Download(file,

        &s3.GetObjectInput{

            Bucket: aws.String(bucket),

            Key:    aws.String(item),

        })

    if err != nil {

        fmt.Println(err)

    }


    fmt.Println("Downloaded", file.Name(), numBytes, "bytes")

}

查看完整回答
反对 回复 2023-06-01
  • 2 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信