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

使用 s3manager 上传文件

使用 s3manager 上传文件

Go
潇潇雨雨 2021-12-27 17:00:12
我正在尝试从我的网站下载一些文件并将它们上传到 amazons3。这是我的代码:import (    "log"    "net/http"    "github.com/aws/aws-sdk-go/aws"    "github.com/aws/aws-sdk-go/aws/credentials"    "github.com/aws/aws-sdk-go/aws/session"    "github.com/aws/aws-sdk-go/service/s3/s3manager")func main() {    // Make a GET request to an image to be downloaded and uploaded to s3    resp, err := http.Get("http://my-site.com/image.jpg")    if err != nil {        log.Fatal(err)    }    // Get the AWS credentials    creds := credentials.NewSharedCredentials("/Users/name/.aws/credentials", "default")    // Set up config    config := &aws.Config{        Region:      aws.String("US Standard"),        Credentials: creds,    }    // Set up a new AWS session    sess := session.New(config)    // Set up a new s3manager client    uploader := s3manager.NewUploader(sess)    result, err := uploader.Upload(&s3manager.UploadInput{        Body:   resp.Body,        Bucket: aws.String("mimi-movies"),        Key:    aws.String("mimi.jpg"),    })    if err != nil {        log.Fatalln("Failed to upload", err)    }    log.Println("Successfully uploaded to", result.Location)}我不断收到 nil 指针取消引用的运行时错误,该错误没有多大帮助,但出于某种原因,我认为这可能与 ssl 有关
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

aws-go-sdk 中存在错误,您可能应该检查您所在的地区。


在您的代码中,您编写了用于获取 AWS 凭证的代码。


// Get the AWS credentials

    creds := credentials.NewSharedCredentials("/Users/name/.aws/credentials", "default")

您可以在终端中尝试此操作:


aws 配置


并配置您的 aws-sdk。


否则,您可以使用 Minio。但是你必须把你的 ACCESS_KEY_ID 和 SECRET_ACCESS_KEY 放在你的代码中,这对生产使用来说非常糟糕。


 s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY", false)

此外,您可以使用外部 API Viper来隐藏这些密钥。但我建议您使用官方的 AWS SDK for Go。


查看完整回答
反对 回复 2021-12-27
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

aws-go-sdk 上存在错误,但解决方案是将区域更改为“us-east-1”


// Set up config

config := &aws.Config{

    Region:      aws.String("us-east-1"),

    Credentials: creds,

}


查看完整回答
反对 回复 2021-12-27
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您也可以使用Minio-go客户端库,其开源并与 AWS S3 兼容。


这是放置对象的简单示例


包主


进口 (

    “日志”

    “操作系统”


    “github.com/minio/minio-go”

)


功能主(){

    // 注意:YOUR-ACCESSKEYID、YOUR-SECRETACCESSKEY、my-testfile、my-bucketname 和

    // my-objectname 是虚拟值,请将它们替换为原始值。


    // 默认情况下,请求始终是安全的 (HTTPS)。设置 insecure=true 以启用不安全 (HTTP) 访问。

    // 这个布尔值是 New() 的最后一个参数。


    // New 返回一个 Amazon S3 兼容的客户端对象。API 兼容性(v2 或 v4)是自动的

    // 根据端点值确定。

    s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY", false)

    如果错误!= nil {

        log.Fatalln(err)

    }


    对象,错误:= os.Open(“我的测试文件”)

    如果错误!= nil {

        log.Fatalln(err)

    }

    延迟 object.Close()


    n, err := s3Client.PutObject("my-bucketname", "my-objectname", object, "application/octet-stream")

    如果错误!= nil {

        log.Fatalln(err)

    }

    log.Println("Uploaded", "my-objectname", " of size: ", n, "Successfully.")

}

Status API Training Shop 博客 关于


希望能帮助到你。



查看完整回答
反对 回复 2021-12-27
  • 3 回答
  • 0 关注
  • 255 浏览
慕课专栏
更多

添加回答

举报

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