参考文档
每月免费10G
https://portal.qiniu.com/kodo/bucket
https://developer.qiniu.com/kodo/sdk/1238/go
安装依赖包,使用go mod
# 复制以下内容添加到 go.mod
github.com/qiniu/api.v7/v7 v7.4.0
# 执行命令安装依赖包
╰─➤ go mod download
添加配置
╰─➤ cat config/config.ini
# 使用七牛免费存储
# https://portal.qiniu.com/kodo/bucket/overview?bucketName=vic-go
[qiniu]
AccessKey = lCuaeMS-eGhpchnIjOYfXyY6h
SecretKey = VD1cwV3HFh6AE9Uq7IWdW0
Bucket = vic-go
QiniuServer = http://qf1jxshys.hd-bkt.clouddn.com/
# 在utils/setting.go里面也要注入解析
╰─➤ cat utils/setting.go
func LoadFile(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()
}
在model目录下添加方法
╰─➤ cat model/UploadFile.go
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"
)
// https://developer.qiniu.com/kodo/sdk/1238/go
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)
// 指定地区,不使用cdn,https
cfg := storage.Config{
Zone: &storage.ZoneHuadong,
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
}
api/v1 下增加路由方法
╰─➤ cat api/v1/upload.go
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,
"url": url,
"message": errmsg.GetErrMsg(code),
})
}
注入路由routers/router.go
╰─➤ cat routers/router.go
// 上传文件
authV1.POST("upload", v1.UpLoad)