minio关于golang的sdk,参看:https://min.io/docs/minio/linux/developers/go/API.html
minio的基本操作,参看往期文章:https://www.madbull.site/?p=792
创建 tminio.go 文件,代码如下,需要修改endpoint、accesskey、secretkey配置。
// go run tminio.go
package main
import (
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"github.com/kataras/golog"
"context"
"io"
"strings"
"path/filepath"
)
func main() {
GetConnectClient()
SaveFileContentToMinio("tt.txt", "test", "ssssssssuuuuuuuuuyyyyyyysssssssssssssssyyyyyyyysssssss\n")
DownloadFileFromMinio("tt.txt", "test", "/tmp")
}
var MinioClient *minio.Client = nil
var endpoint = "HOST:PORT"
var accessKeyId = "accesskey"
var secretAccessKey = "secretkey"
var useSSL = false
/*
* 根据配置文件初始化 minio 客户端连接池
*/
func GetConnectClient() *minio.Client {
mc, err := minio.New( endpoint, &minio.Options{
Creds: credentials.NewStaticV4( accessKeyId, secretAccessKey, "" ),
Secure: useSSL,
})
if err != nil {
golog.Error(err)
golog.Println("connect minio failed !")
}
MinioClient = mc
return MinioClient
}
/*
* 如果 bucket 不存在,则创建 bucket
*/
func makeBucketIfNotExists(ctx context.Context, MinioClient *minio.Client, bucketName string) bool {
found, err := MinioClient.BucketExists(ctx, bucketName)
if err != nil {
golog.Error(err)
return false
}
if found {
golog.Debug("Bucket found " + bucketName )
return true
}
err = MinioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{})
if err != nil {
golog.Error(err)
return false
}
return true
}
/*
* 保存数据到指定 bucket 的指定文件
*/
func SaveFileContentToMinio(filename string, bucketName string, fileContent string) bool {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
ret := makeBucketIfNotExists(ctx, MinioClient, bucketName)
if ret == false {
golog.Error("makeBucketIfNotExists failed !")
return false
}
var buffer io.Reader = strings.NewReader(fileContent)
_, err := MinioClient.PutObject(ctx, bucketName, filename, buffer, -1, minio.PutObjectOptions{})
if err != nil {
golog.Errorf("put %s %s failed !", bucketName, filename)
golog.Error(err)
return false
}
golog.Info("Successfully uploaded ! ")
return true
}
/*
* 从minio中下载文件
*/
func DownloadFileFromMinio(filename string, bucketName string, path string) bool {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
fullpath := filepath.Join(path, filename)
err := MinioClient.FGetObject(ctx, bucketName, filename, fullpath, minio.GetObjectOptions{} )
if err != nil {
golog.Errorf("download %s %s failed !", bucketName, filename)
golog.Error(err)
return false
}
golog.Info("Successfully download : " + bucketName + " " + fullpath + " !")
return true
}
创建 go.mod 文件,代码只有一行,如下
module tminio
测试结果

发表回复