golang gin 上传图片到aws s3

golang gin 上传图片到aws s3


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)
}

}

1
上面是postman请求格式