Gin + 七牛雲物件儲存
阿新 • • 發佈:2020-11-28
七牛雲
簡介
(七牛雲)隸屬於上海七牛資訊科技有限公司,七牛雲是國內領先的企業級雲服務商,專注於以資料管理為中心的雲端計算業務研發和運營,圍繞富媒體場景推出了物件儲存、融合 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)
}