zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    你所不知道的mfc…mfc项目索引 &mfc调优指南 &mfc vc添加添加子功能指南
    Cu 大彻大悟内存管理 mm (update 0410)
    [转]Linux iostat监测IO状态
    linux virtual memory layout by moniskiller upload [读书笔记]
    河畔找到的 面经笔经
    【转】Linux本地磁盘(硬盘)介绍
    读写UTF8、Unicode文件
    codesmith执行时提示“调用的目标发生了异常”的处理过程经验。
    DB2表信息以及字段信息的表
    iBatis.NET获取resultMap相关数据
  • 原文地址:https://www.cnblogs.com/you-men/p/14053217.html
Copyright © 2011-2022 走看看