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

golang使用minio上传资源文件的功能,第1张

前言

项目使用开源的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 %s\n", 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=%s\n", 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)
			}
		}
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/996156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存