使用 Go 上傳檔案到 MinIO 儲存服務

安裝套件

安裝 minio-go 套件。

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

建立儲存貯體

使用 minio.New 函式建立連線,並使用 MakeBucket 函式建立儲存貯體。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
endpoint := "127.0.0.1:9000" // API 端點
accessKeyID := os.Getenv("MINIO_ACCESS_KEY") // Access Key
secretAccessKey := os.Getenv("MINIO_SECRET_KEY") // Secret Key

// 建立連線
minioClient, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
Secure: false, // 是否使用 HTTPS
})

if err != nil {
log.Fatal(err)
}

// 建立儲存貯體
bucketName := "bucket"
location := "us-east-1"

err = minioClient.MakeBucket(context.Background(), bucketName, minio.MakeBucketOptions{Region: location})
if err != nil {
log.Fatal(err)
}

存取檔案

使用 FPutObject 函式上傳檔案。

1
2
3
4
5
6
7
8
9
10
11
12
bucketName := "bucket"
objectName := "test.txt"
filePath := "./test.txt"
contentType := "text/plain"

// 上傳檔案
info, err := minioClient.FPutObject(context.Background(), bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})
if err != nil {
log.Fatal(err)
}

log.Printf("Successfully uploaded %s of size %d\n", objectName, info.Size)

使用 FGetObject 函式下載檔案。

1
2
3
4
5
6
7
8
bucketName := "bucket"
objectName := "test.txt"
filePath := "./test.txt"

err = minioClient.FGetObject(context.Background(), bucketName, objectName, filePath, minio.GetObjectOptions{})
if err != nil {
log.Fatal(err)
}

參考資料