首页 > 其他分享 >Gin连接Minio

Gin连接Minio

时间:2024-11-16 10:57:53浏览次数:1  
标签:err return Minio nil name file Gin 连接 string

package storage

import (
    "context"
    "fmt"
    "WchimeGinSystem/conf"
    "WchimeGinSystem/utils"
    "io"
    "log"
    "path/filepath"
    "strings"
    "time"

    "github.com/minio/minio-go/v7"
    "github.com/minio/minio-go/v7/pkg/credentials"
)

var MinioClientGlobal *MinioClient

type MinioClient struct {
    Client *minio.Client
}

func (m *MinioClient) UploadFile(file io.Reader, bucket string, path_name string, ContentType string) error {
    var opt *minio.PutObjectOptions
    if ContentType != "" {
        opt = &minio.PutObjectOptions{ContentType: MyContentType["png"]}
    } else {
        opt = &minio.PutObjectOptions{ContentType: MyContentType[ContentType]}
    }
    // 上传文件到存储桶
    _, err := m.Client.PutObject(context.Background(), bucket, path_name, file, -1, *opt)
    if err != nil {
        log.Println("上传文件失败: ", err)
        return err
    }
    return nil
}

func (m *MinioClient) GetFile(bucketName, objectName string) (*minio.Object, error) {
    // 下载存储桶中的文件

    object, err := m.Client.GetObject(context.Background(), bucketName, objectName, minio.GetObjectOptions{})
    if err != nil {
        log.Println("获取文件失败: ", err)
        return nil, err
    }

    return object, nil
}

// GetPresignedGetObject 返回对象的url地址,有效期时间为expires
func (m *MinioClient) GetPresignedGetObject(bucketName string, objectName string, expires time.Duration) (string, error) {

    object, err := m.Client.PresignedGetObject(context.Background(), bucketName, objectName, expires, nil)
    if err != nil {
        log.Println("获取文件失败: ", err)
        return "", err
    }

    return object.String(), nil
}

// 删除对象
func (m *MinioClient) RemoveFile(bucketName string, objectName string) error {
    opt := minio.RemoveObjectOptions{}
    err := m.Client.RemoveObject(context.Background(), bucketName, objectName, opt)
    if err != nil {
        log.Println("删除文件失败: ", err)
        return err
    }

    return nil
}

// ----------------------------------------------------------

// NewMinioClient 初始化minio
func NewMinioClient() (*MinioClient, error) {
    // 初始化 Minio 客户端
    endpoint := fmt.Sprintf("%s:%s", conf.MINIO_HOST, conf.MINIO_PORT)
    minioClient, err := minio.New(endpoint, &minio.Options{
        Creds:  credentials.NewStaticV4(conf.MINIO_USER, conf.MINIO_PWD, ""),
        Secure: conf.MINIO_SECURE,
    })
    if err != nil {
        log.Println("Minio链接失败: ", err)
        return nil, err
    }
    client := &MinioClient{
        Client: minioClient,
    }
    MinioClientGlobal = client
    return MinioClientGlobal, nil
}

func MinioUpload(file io.Reader, file_name string, forlder_path string, ContentType string) (string, error) {

    name_li := strings.Split(file_name, ".")
    file_type := name_li[len(name_li)-1]
    time_name := utils.GetTimeString()
    new_file_name := time_name + "." + file_type
    put_path := filepath.Join(forlder_path, new_file_name)
    put_path = strings.ReplaceAll(put_path, "\\", "/")
    client, err := NewMinioClient()
    if err != nil {
        return "", err
    }
    err = client.UploadFile(file, conf.MINIO_BUCKET, put_path, ContentType)
    return put_path, err
}

func MinioGetFile(file_name string) (*minio.Object, error) {
    client, err := NewMinioClient()
    if err != nil {
        return nil, err
    }
    return client.GetFile(conf.MINIO_BUCKET, file_name)
}

func MinioGetURL(file_name string) (string, error) {
    client, err := NewMinioClient()

    if err != nil {
        return "", err
    }
    return client.GetPresignedGetObject(conf.MINIO_BUCKET, file_name, time.Duration(300)*time.Second)
}

func MinioDelFile(file_name string) error {
    client, err := NewMinioClient()

    if err != nil {
        return err
    }
    return client.RemoveFile(conf.MINIO_BUCKET, file_name)
}

 

完整代码地址:https://gitee.com/mom925/gin-system

踩坑:使用fresh热加载时,获取的文件地址会乱码

 

标签:err,return,Minio,nil,name,file,Gin,连接,string
From: https://www.cnblogs.com/moon3496694/p/18549138

相关文章