项目使用开源的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)
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)