📔Golang

1. Install the Dependencies

To install the project dependencies, simply run the following command in your terminal:

go mod init aws_s3
go get github.com/aws/aws-sdk-go-v2/service/s3

The following commands show how to retrieve the standard set of SDK modules to use in your application.

go get github.com/aws/aws-sdk-go-v2
go get github.com/aws/aws-sdk-go-v2/config

2. Setup the Environment

We will be setting up two environment variables, ACCESS_KEY and SECRET_KEY, which are required to access the S3 Cloud Storage service. Assign the values of these variables to the values of your credential that you received.

export ACCESS_KEY=<your-access-key>
export SECRET_KEY=<your-secret-key>

3. Minimal code example

package main
 
import (
	"context"
	"log"
	"os"
	"strings"
 
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/s3"
)
 
func main() {
	resolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
		return aws.Endpoint{
			URL:           "S3_ENDPOINT_URL",
			SigningRegion: "us-east-1",
		}, nil
	})
 
	credentials := aws.CredentialsProviderFunc(func(ctx context.Context) (aws.Credentials, error) {
		return aws.Credentials{
			AccessKeyID:     "YOUR_ACCESS_KEY_ID",
			SecretAccessKey: "YOUR_SECRET_ACCESS_KEY",
		}, nil
	})
 
	// Load config
	cfg, err := config.LoadDefaultConfig(context.TODO(),
		config.WithCredentialsProvider(credentials),
		config.WithEndpointResolverWithOptions(resolver),
	)
	if err != nil {
		log.Fatal(err)
	}
 
	// Create an Amazon S3 service client
	s3Client := s3.NewFromConfig(cfg,
		func(o *s3.Options) {
			o.UsePathStyle = true
		},
	)
 
	filePath := "YOUR_FILE_PATH"
	// Get file name from filePath
	path := strings.Split(filePath, "/")
	fileName := path[len(path)-1]
 
	file, openErr := os.Open(filePath)
	if openErr != nil {
		log.Fatal(openErr)
	}
	defer file.Close()
	_, putErr := s3Client.PutObject(context.TODO(), &s3.PutObjectInput{
		Bucket: aws.String("YOUR_BUCKET_NAME"),
		Key:    aws.String(fileName),
		Body:   file,
	})
 
	if putErr != nil {
		panic(putErr)
	}
 
	log.Println("Successfully uploaded object")
}

Last updated