1. 程式人生 > 實用技巧 >Gin + 七牛雲物件儲存

Gin + 七牛雲物件儲存

七牛雲

簡介

(七牛雲)隸屬於上海七牛資訊科技有限公司,七牛雲是國內領先的企業級雲服務商,專注於以資料管理為中心的雲端計算業務研發和運營,圍繞富媒體場景推出了物件儲存、融合 CDN 加速、容器計算雲、大資料平臺、人工智慧平臺等產品,並提供一站式視訊雲解決方案。公司目前已位列國內雲端計算行業第一陣營,為 70 多萬家企業提供服務。

在國內,七牛絕對是golang的領導者

配置七牛雲端儲存

建立儲存空間

拿到金鑰

安裝七牛雲物件儲存SDK

推薦go.mod安裝

// 將下面地址複製到go.mod,然後執行go mod download
github.com/qiniu/api.v7/v7 v7.4.0


// 或者直接get
govendor fetch github.com/qiniu/api.v7/v7

完成七牛雲上傳程式碼邏輯

解析配置檔案的AccessKey和SecretKey
var (
	AccessKey   string
	SecretKey   string
	Bucket      string
	QiniuServer string
)

func init() {
	file, err := ini.Load("config/config.ini")
	if err != nil {
		fmt.Println("配置檔案讀取錯誤,請檢查檔案路徑:", err)
	}
	LoadQiniu(file)
}

func LoadQiniu(file *ini.File)  {
	AccessKey = file.Section("qiniu").Key("AccessKey").String()
	SecretKey = file.Section("qiniu").Key("SecretKey").String()
	Bucket = file.Section("qiniu").Key("Bucket").String()
	QiniuServer = file.Section("qiniu").Key("QiniuServer").String()
}
編寫上傳檔案api
package v1

import (
	"ginblog/model"
	"ginblog/utils/errmsg"
	"github.com/gin-gonic/gin"
	"net/http"
)

func UpLoad(c *gin.Context) {
	file,fileHeader,_ := c.Request.FormFile("file")
	fileSize := fileHeader.Size
	url, code := model.UpLoadFile(file, fileSize)

	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"message": errmsg.GetErrMsg(code),
		"url":     url,
	})
}
編寫七牛雲上傳函式
package model

import (
	"context"
	"ginblog/utils"
	"ginblog/utils/errmsg"
	"github.com/qiniu/api.v7/v7/auth/qbox"
	"github.com/qiniu/api.v7/v7/storage"
	"mime/multipart"
)

var AccessKey = utils.AccessKey
var SecretKey = utils.SecretKey
var Bucket = utils.Bucket
var ImgUrl = utils.QiniuServer

func UpLoadFile(file multipart.File, fileSize int64) (string, int) {
	putPolicy := storage.PutPolicy{
		Scope: Bucket,
	}
	mac := qbox.NewMac(AccessKey, SecretKey)
	upToken := putPolicy.UploadToken(mac)

	cfg := storage.Config{
		Zone:          &storage.ZoneHuabei,
		UseCdnDomains: false,
		UseHTTPS:      false,
	}

	putExtra := storage.PutExtra{}

	formUploader := storage.NewFormUploader(&cfg)
	ret := storage.PutRet{}

	err := formUploader.PutWithoutKey(context.Background(), &ret, upToken, file, fileSize, &putExtra)
	if err != nil {
		return "", errmsg.ERROR
	}
	url := ImgUrl + ret.Key
	return url, errmsg.SUCCESS
}
編寫路由
r := gin.Default()

auth := r.Group("api/v1")
{	
		// 上傳檔案
		auth.POST("upload",v1.UpLoad)
}

測試功能

Postman