zoukankan      html  css  js  c++  java
  • golang gin 上传图片到aws s3

    要上传图片到aws s3首先需要 知道 aws 的地区 也就是region ,还需要知道储存桶的名字,其次就是Access key ID和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)
    	}
    }
    

      

    上面是postman请求格式

  • 相关阅读:
    HttpModule和在Global.asax区别
    SQL Server中视图的特点与优化
    SQL中int类型与varchar类型的隐式转换
    利用SQL语句查询SQL中所有正在执行的命令
    jquery子窗体操作父窗体中的元素
    js 连接数据库
    典型的列变行,用动态语句来做
    js中with、this的用法
    SQL SERVER数据库状态(脱机,联机,可疑)及SQL设置语句详解
    UVA 10465 Homer Simpson
  • 原文地址:https://www.cnblogs.com/sumafan/p/11457286.html
Copyright © 2011-2022 走看看