title: 使用golang代码操作minio对象
date: 2022-10-30 17:43:00
tags: [minio]
categories: linux
description: minio是一个分布式文件存储系统,用来存储图片、文件、视频等文件资料。minio是一个高性能的对象存储。使用golang代码操作minio对象
mathjax: true
使用golang代码操作minio对象
go moudle引入minio sdk
go get github.com/minio/minio-go/v7
将minio相关参数加入配置文件
minio:
url: "192.164.20.20"
port: 9000
accessKey: minioadmin
secretKey: minioadmin
启动自动读取minio相关配置
//通过viper 获取minio配置信息
viper.SetConfigFile("app.yml")
viper.AddConfigPath(".")
viper.ReadInConfig()
//初始化配置
minioUrl := viper.GetString("minio.url")
minioPort := viper.GetString("minio.port")
minioAccessKey := viper.GetString("minio.accessKey")
minioSecretKey := viper.GetString("minio.secretKey")
初始化minio client
//根据配置文件连接minio server
minioClient, err := minio.New(minioUrl+":"+minioPort, &minio.Options{Creds: credentials.NewStaticV4(minioAccessKey, minioSecretKey, "")})
if err != nil {
log.Fatalf("conetct minio server fail %s url %s ", err.Error(), minioUrl+":"+minioPort)
}
判断bulk 桶是否存在
// 判断存储桶是否存在
func existBulck(minioClient *minio.Client, bulkName string) bool {
bool, err := minioClient.BucketExists(context.Background(), bulkName)
if err != nil {
log.Fatalf("is exist bulk eror " + err.Error())
return false
}
return bool
}
上传对象
// 上传对象
func uploadObject(minioClient *minio.Client, bulkName, objectName, localFileName string) {
_, err := minioClient.FPutObject(context.Background(), bulkName, objectName, localFileName, minio.PutObjectOptions{})
if err != nil {
log.Fatalf("upload object error " + err.Error())
}
}
下载对象
// 下载对象
func downObject(minioClient *minio.Client, bulkName, objectName, localFileName string) {
object, err := minioClient.GetObject(context.Background(), bulkName, objectName, minio.GetObjectOptions{})
if err != nil {
log.Fatalf("download object error " + err.Error())
return
}
localFile, err := os.Create(localFileName)
if err != nil {
log.Fatalf("create local object error " + err.Error())
}
_, err = io.Copy(localFile, object)
if err != nil {
log.Fatalf("write object from object to local file error " + err.Error())
return
}
}
删除对象
// 删除对象
func removeObject(minioClient *minio.Client, bulkName, objectName string) {
err := minioClient.RemoveObject(context.Background(), bulkName, objectName, minio.RemoveObjectOptions{})
if err != nil {
log.Fatalf("remove object eror " + err.Error())
return
}
}
测试方法
//根据配置文件连接minio server
minioClient, err := minio.New(minioUrl+":"+minioPort, &minio.Options{Creds: credentials.NewStaticV4(minioAccessKey, minioSecretKey, "")})
if err != nil {
log.Fatalf("conetct minio server fail %s url %s ", err.Error(), minioUrl+":"+minioPort)
}
//上传文件
if existBulck(minioClient, "test") {
uploadObject(minioClient, "test", "blog.zip", "c:\\blog.zip")
}
//下载文件
if existBulck(minioClient, "test") {
downObject(minioClient, "test", "blog.zip", "d:\\blog.zip")
}
//删除文件
if existBulck(minioClient, "test") {
removeObject(minioClient, "test", "blog.zip")
}