栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang使用minio上传资源文件的功能

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang使用minio上传资源文件的功能

前言
  • 项目使用开源的minio作为热更新资源存储方案,minio可以将资源直接拖拽上传。

  • 项目已经有现成的自动打包方案,打包后的资源当前是手动拖拽到minio上,有时容易拖错,也不能集成到jenkins上实现自动化上传

  • 为了实现一套自动上传方案,需要将整个资源包及子文件夹下的资源一起上传,但minio和oss一样,不支持上传文件夹,只支持上传单个文件

  • minio参考资料:https://github.com/minio/minio

  • 下面代码功能将实现使用golang版minio的SDK,上传整个文件夹包括其子文件夹中的所有资源

  • 后续优化:需要增加从jenkins中读取参数,因为要上传的资源地址是会变的

代码
package main

import (
	"fmt"
	"github.com/minio/minio-go/v6"
	"io/ioutil"
	"log"
	"strings"
)

func main() {
	c := NewClient()
	c.checkBucket()
	c.UpLoadFile(c.targetFilePath)
}

type client struct {
	client         *minio.Client
	bucketName     string
	targetFilePath string
	useSSL         bool
	location       string
}

func NewClient() *client {
	var endpoint = "35.xxx.xxx.xxx:9000"                             //minio地址
	var accessKeyID = "AKIAIOSFODNN7EXAMPLE"                         //账号
	var secretAccessKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" //密码
	var useSSL = false                                               //使用http或https
	target, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL)
	if err != nil {
		log.Fatalln(err)
		return nil
	}
	return &client{
		client:         target,
		bucketName:     "hotfix",                                        //目标bucket
		location:       "cn-north-1",                                    //放在哪个地方,这里为中国
		targetFilePath: "/Users/emao/work_space/UU/Build/Full/0_0_1_17", //资源文件夹的路径
	}
}

//checkBucket 检测目标bucket是否存在,不存在就创建一个
func (c *client) checkBucket() {
	isExists, err := c.client.BucketExists(c.bucketName)
	if err != nil {
		log.Println("check bucket exist error ")
		return
	}

	if !isExists {
		err2 := c.client.MakeBucket(c.bucketName, c.location)
		if err2 != nil {
			log.Println("MakeBucket error ")
			fmt.Println(err2)
			return
		}
		log.Printf("Successfully created %sn", c.bucketName)
	}
}

//UpLoadFile 将整个目录都上传,遍历所有文件夹及子文件夹上传
func (c *client) UpLoadFile(path string) {
	rd, _ := ioutil.ReadDir(path)
	for _, fi := range rd {
		if fi.IsDir() {
			c.UpLoadFile(path + "/" + fi.Name())
		} else {
			if strings.Index(fi.Name(), ".dat") > 0 {
				fullPath := path + "/" + fi.Name()
				rawPathLength := len(c.targetFilePath)
				objectName := fullPath[rawPathLength:]
				log.Printf("fullPath=%s  ,objectName=%sn", fullPath, objectName)
				n, err := c.client.FPutObject(c.bucketName, objectName, fullPath, minio.PutObjectOptions{
					ContentType: "",
				})
				if err != nil {
					fmt.Println(err)
					return
				}
				fmt.Println("Successfully uploaded bytes: ", n)
			}
		}
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909767.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号