使用 s3manager 上传文件

我正在尝试从我的网站下载一些文件并将它们上传到 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 有关


潇潇雨雨
浏览 258回答 3
3回答

阿波罗的战车

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。

江户川乱折腾

aws-go-sdk 上存在错误,但解决方案是将区域更改为“us-east-1”// Set up configconfig := &aws.Config{    Region:      aws.String("us-east-1"),    Credentials: creds,}

一只萌萌小番薯

您也可以使用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 博客 关于希望能帮助到你。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go