七牛雲
簡介
(七牛雲)隸屬於上海七牛信息技術有限公司,七牛雲是國內領先的企業級雲服務商,專注於以數據管理為中心的雲計算業務研發和運營,圍繞富媒體場景推出了對象存儲、融合 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)
}