Go S3 upload
Posted on Fri 28 April 2017 in Golang
package main import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/s3/s3manager" "github.com/aws/aws-sdk-go/aws/session" "log" "os" ) func s3Upload(bucket, path, region string) { sess := session.Must(session.NewSession(&aws.Config{ Region: aws.String(region), })) file, err := os.Open(path) if err != nil { log.Fatalln("Error when opening", path, err) } filename := file.Name() upparams := &s3manager.UploadInput{ Bucket: &bucket, Key: &filename, Body: file, ACL: aws.String("private"), } uploader := s3manager.NewUploader(sess) _, err = uploader.Upload(upparams) if err != nil { log.Fatalln("Error when uploading to S3", err) } }
The above will attempt to retrieve AWS credentials from file (~/.aws/credentials on Linux I think) or fallback to environment variables, ie. AWS_ACCESS_KEY_ID and AWS_SECRET_KEY.
You may want to change the filename variable to get the value from filepath.Base(file.Name()) instead (import "path/filepath"), unless you want to recreate the directory structure for path in S3.