Skip to content

MinIO

MinIO 是一个高性能、分布式的对象存储服务,兼容 Amazon S3 API。Go 中的 MinIO 用法非常简单,下面是如何在 Go 项目中使用 MinIO 的基本步骤:

1. 安装 MinIO Go 客户端

首先,需要安装 MinIO Go 客户端库。可以使用 go get 安装:

bash
go get github.com/minio/minio-go/v7

2. 初始化 MinIO 客户端

在 Go 中使用 MinIO,首先需要创建一个 MinIO 客户端实例。以下是初始化客户端的代码:

go
package main

import (
	"log"

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

func main() {
	// 配置 MinIO 客户端
	endpoint := "localhost:9000"       // MinIO 服务器的地址
	accessKeyID := "your-access-key"   // Access Key
	secretAccessKey := "your-secret-key" // Secret Key
	useSSL := false                    // 是否使用 SSL

	// 初始化 MinIO 客户端
	client, err := minio.New(endpoint, &minio.Options{
		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
		Secure: useSSL,
	})
	if err != nil {
		log.Fatalln(err)
	}

	log.Println("MinIO Client initialized successfully")
}

3. 创建存储桶 (Bucket)

要在 MinIO 中存储文件,首先需要创建一个存储桶。以下是如何创建一个存储桶的代码:

go
bucketName := "my-bucket"
location := "us-east-1"

// 创建存储桶
err = client.MakeBucket(context.Background(), bucketName, minio.MakeBucketOptions{
	Region: location,
})
if err != nil {
	if exists, _ := client.BucketExists(context.Background(), bucketName); exists {
		log.Printf("Bucket %s already exists.\n", bucketName)
	} else {
		log.Fatalln(err)
	}
}
log.Printf("Bucket %s created successfully.\n", bucketName)

4. 上传文件到 MinIO

上传文件到 MinIO 存储桶,可以使用 PutObject 方法:

go
objectName := "test-file.txt"
filePath := "/path/to/your/file.txt"
contentType := "text/plain"

// 上传文件
_, err = client.FPutObject(context.Background(), bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})
if err != nil {
	log.Fatalln(err)
}

log.Printf("File %s uploaded successfully.\n", objectName)

5. 下载文件

从 MinIO 下载文件可以使用 GetObject 方法:

go
objectName := "test-file.txt"
filePath := "/path/to/destination/file.txt"

// 下载文件
err = client.FGetObject(context.Background(), bucketName, objectName, filePath, minio.GetObjectOptions{})
if err != nil {
	log.Fatalln(err)
}

log.Printf("File %s downloaded successfully.\n", objectName)

6. 列举存储桶中的对象

如果你想列举存储桶中的所有对象,可以使用 ListObjects 方法:

go
objects := client.ListObjects(context.Background(), bucketName, minio.ListObjectsOptions{Recursive: true})

for object := range objects {
	if object.Err != nil {
		log.Fatalln(object.Err)
	}
	log.Printf("Found object: %s\n", object.Key)
}

7. 删除文件

要从 MinIO 中删除文件,可以使用 RemoveObject 方法:

go
objectName := "test-file.txt"

// 删除文件
err = client.RemoveObject(context.Background(), bucketName, objectName, minio.RemoveObjectOptions{})
if err != nil {
	log.Fatalln(err)
}

log.Printf("File %s deleted successfully.\n", objectName)

总结

  1. 初始化客户端:通过 minio.New() 来创建客户端。
  2. 创建存储桶:使用 MakeBucket() 方法来创建存储桶。
  3. 上传文件:通过 FPutObject() 方法上传文件。
  4. 下载文件:使用 FGetObject() 方法来下载文件。
  5. 列举对象:通过 ListObjects() 方法列出存储桶中的所有对象。
  6. 删除文件:使用 RemoveObject() 删除文件。

这样,你就可以轻松在 Go 中与 MinIO 进行交互了。