7、ginBlog 使用七牛存储文件上传

参考文档

每月免费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)

不使用token 上传失败

image

使用token上传

image

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值