golang gin upload pictures to aws s3

To upload images to aws aws s3 first need to know the region is region, also you need to know the name of the storage barrels, followed by Access key ID and Secret access key

package handler

import (
	"bytes"
	"io/ioutil"
	"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"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"gopkg.in/yaml.v2"
)

type conf struct {
	AccessKeyID     string `yaml:"AccessKeyID"`
	SecretAccessKey string `yaml:"SecretAccessKey"`
	S3Region        string `yaml:"S3Region"`
	S3Bucket        string `yaml:"S3Bucket"`
}

func (c *conf) GetConf() *conf {
	yamlFile, err := ioutil.ReadFile("conf/app.yaml")
	if err != nil {
		log.Printf("yamlFile.Get err   #%v ", err)
	}

	err = yaml.Unmarshal(yamlFile, c)
	if err != nil {
		log.Fatalf("Unmarshal: %v", err)
	}
	return c
}

var config conf

func UploadDocument(c *gin.Context) {

	config.GetConf()
	AccessKeyID := config.AccessKeyID
	SecretAccessKey := config.SecretAccessKey
	S3Region := config.S3Region
	S3Bucket := config.S3Bucket

	logger := c.MustGet("logger").(*zap.SugaredLogger)
	fileHeader, err := c.FormFile("file")
	f, err := fileHeader.Open()
	var size int64 = fileHeader.Size

	buffer := make([]byte, size)
	f.Read(buffer)

	creds := credentials.NewStaticCredentials(AccessKeyID, SecretAccessKey, "")
	s, err := session.NewSession(&aws.Config{
		Region:      aws.String(S3Region),
		Credentials: creds,
	})
	if err != nil {
		logger.Errorw("An error occurs when processing file uploading", "error", err)
	}

	_, err = s3.New(s).PutObject(&s3.PutObjectInput{
		Bucket:             aws.String(S3Bucket),
		Key:                aws.String("myfolder" + "/" + fileHeader.Filename),
		ACL:                aws.String("private"),
		Body:               bytes.NewReader(buffer),
		ContentLength:      aws.Int64(size),
		ContentType:        aws.String(http.DetectContentType(buffer)),
		ContentDisposition: aws.String("attachment"),
	})
	if err != nil {
		logger.Errorw("An error occurs when processing file uploading", "error", err)
	}
}

  

The above is a request format postman

 

Guess you like

Origin www.cnblogs.com/sumafan/p/11457286.html