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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM