You can use the code below to upload files to aws s3 bucket using go :
"import "github.com/aws/aws-sdk-go/service/s3"
Package s3 provides the client and types for making API requests to Amazon Simple Storage Service.
package main import ( "bytes" "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" "log" "net/http" )
Get Bucket Region:
GetBucketRegion will attempt to get the region for a bucket using a region hint to determine which AWS partition to perform the query on. Use this utility to determine the region a bucket is in.var S3_REGION, S3_BUCKET string func LS3BucketInitialization() { S3REGION, errRegion := "S3_REGION NAME" S3BUCKET, errBucket := "S3_BUCKET NAME" if errRegion != nil || errBucket != nil { log.Fatal(errRegion, errBucket) return } S3_REGION = S3REGION.Value S3_BUCKET = S3BUCKET.Value }
Upload Managers :
The s3manager package's Uploader provides a concurrent upload of content to S3 by taking advantage of S3's Multipart APIs. The Uploader also supports both io. Reader for streaming uploads, and will also take advantage of io.ReadSeeker for optimizations if the Body satisfies that type. Once the Uploader instance is created you can call Upload concurrently from multiple goroutines safely.
// The session the S3 Uploader will usefunc SessionS3BucketInFile(fileName string, fileData string) { if S3_REGION == "" || S3_BUCKET == "" { fmt.Println("*****S3 Variable is empty!********") return } /*Create a single AWS session (we can re use this if we're uploading many files)*/ s, err := session.NewSession(&aws.Config{Region: aws.String(S3_REGION)}) if err != nil { log.Fatal(err) } // Upload err = AddFileToS3(s, fileName, fileData) if err != nil { log.Fatal(err) } s.Handlers.Clear() return }
Add File To S3 will upload a single file to S3, it will require a pre-built aws session and will set file info like content type and encryption on the uploaded file.
func AddFileToS3(s *session.Session, fileDir string, fileData string) error {// Get file size and read the file content into a bufferbuffer := []byte(fileData) size := int64(len(fileData)) /*Config settings: this is where you choose the bucket, filename, content-type etc. of the file you're uploading.*/_, err := s3.New(s).PutObject(&s3.PutObjectInput{ Bucket: aws.String(S3_BUCKET), Key: aws.String(fileDir), ACL: aws.String("private"), Body: bytes.NewReader(buffer), ContentLength: aws.Int64(size), ContentType: aws.String(http.DetectContentType(buffer)), ContentDisposition: aws.String("attachment"), ServerSideEncryption: aws.String("AES256"), }) fmt.Println("s3bucket error:", err) return err }
Thank you for sharing Good information...
ReplyDeleteAWS Online Training
AWS Training
AWS certification training
Tech Related post here
ReplyDelete