一、Minio簡介
Minio是一個開源對象存儲服務器,可以用於存儲和訪問大規模的數據,提供了Amazon S3兼容API。Minio優化了傳統對象存儲服務器的性能和功能,可以幫助用戶更好地管理海量數據。其最大的特點是比文件服務器更安全,採用的是對象存儲架構,是分佈式多副本系統。
二、Minio的安裝和部署
Minio可以在任何硬件或操作系統上部署,安裝過程十分簡單,只需要從官網下載安裝包並解壓即可,在命令行中啟動Minio服務器,使用瀏覽器就可以訪問了。以下是安裝和部署的詳細步驟:
curl https://dl.minio.io/server/minio/release/linux-amd64/minio -o /usr/local/bin/minio
chmod +x /usr/local/bin/minio
minio server /data
其中,第一行命令是下載Minio服務器的可執行文件,參數-o表示指定輸出文件路徑,這裡指定為/usr/local/bin/minio。第二行命令是給Minio服務器可執行文件設置執行權限。第三行命令是啟動Minio服務器,參數/data表示數據存儲路徑。
三、Minio的使用
1. 創建Bucket
Bucket是存儲對象的容器,可以是獨立的數據存儲或是層次化的存儲。Bucket是在創建時確定的,一旦創建就不能更改。以下是創建Bucket的代碼示例:
package main
import (
"fmt"
"github.com/minio/minio-go/v7"
"context"
)
func main() {
endpoint := "localhost:9000"
accessKeyID := "ACCESS_KEY"
secretAccessKey := "SECRET_KEY"
useSSL := false
// 初始化Minio客戶端對象
minioClient, err := minio.New(endpoint, &minio.Options{
Credentials: &minio.Credentials{
AccessKeyID: accessKeyID,
SecretAccessKey: secretAccessKey,
},
Secure: useSSL,
})
if err != nil {
fmt.Println(err)
return
}
// 創建Bucket
ctx := context.Background()
bucketName := "test-bucket"
location := "us-east-1"
err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location})
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Bucket created successfully")
}
2. 上傳對象
將文件上傳到Minio服務器中的Bucket中,必須先指定要使用的Bucket名稱。以下是上傳對象的代碼示例:
package main
import (
"fmt"
"github.com/minio/minio-go/v7"
"context"
"io/ioutil"
)
func main() {
endpoint := "localhost:9000"
accessKeyID := "ACCESS_KEY"
secretAccessKey := "SECRET_KEY"
useSSL := false
// 初始化Minio客戶端對象
minioClient, err := minio.New(endpoint, &minio.Options{
Credentials: &minio.Credentials{
AccessKeyID: accessKeyID,
SecretAccessKey: secretAccessKey,
},
Secure: useSSL,
})
if err != nil {
fmt.Println(err)
return
}
// 上傳對象
ctx := context.Background()
bucketName := "test-bucket"
objectName := "test-object"
filePath := "/path/to/file"
contentType := "application/octet-stream"
data, err := ioutil.ReadFile(filePath)
if err != nil {
fmt.Println(err)
return
}
_, err = minioClient.PutObject(ctx, bucketName, objectName, bytes.NewReader(data), -1, minio.PutObjectOptions{ContentType: contentType})
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Object created successfully")
}
3. 下載對象
從Minio服務器中下載對象到本地文件系統。以下是下載對象的代碼示例:
package main
import (
"fmt"
"github.com/minio/minio-go/v7"
"context"
"io/ioutil"
)
func main() {
endpoint := "localhost:9000"
accessKeyID := "ACCESS_KEY"
secretAccessKey := "SECRET_KEY"
useSSL := false
// 初始化Minio客戶端對象
minioClient, err := minio.New(endpoint, &minio.Options{
Credentials: &minio.Credentials{
AccessKeyID: accessKeyID,
SecretAccessKey: secretAccessKey,
},
Secure: useSSL,
})
if err != nil {
fmt.Println(err)
return
}
// 下載對象
ctx := context.Background()
bucketName := "test-bucket"
objectName := "test-object"
filePath := "/path/to/destination/file"
err = minioClient.FGetObject(ctx, bucketName, objectName, filePath, minio.GetObjectOptions{})
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Object downloaded successfully")
}
4. 列出Bucket中的對象
列出指定Bucket中的所有對象。以下是列出Bucket中的對象的代碼示例:
package main
import (
"fmt"
"github.com/minio/minio-go/v7"
"context"
)
func main() {
endpoint := "localhost:9000"
accessKeyID := "ACCESS_KEY"
secretAccessKey := "SECRET_KEY"
useSSL := false
// 初始化Minio客戶端對象
minioClient, err := minio.New(endpoint, &minio.Options{
Credentials: &minio.Credentials{
AccessKeyID: accessKeyID,
SecretAccessKey: secretAccessKey,
},
Secure: useSSL,
})
if err != nil {
fmt.Println(err)
return
}
// 列出Bucket中的對象
ctx := context.Background()
bucketName := "test-bucket"
doneCh := make(chan struct{})
defer close(doneCh)
for object := range minioClient.ListObjects(ctx, bucketName, minio.ListObjectsOptions{
Recursive: true,
}) {
if object.Err != nil {
fmt.Println(object.Err)
return
}
fmt.Println(object.Key)
}
}
5. 刪除Bucket中的對象
從指定Bucket中刪除對象。以下是刪除Bucket中的對象的代碼示例:
package main
import (
"fmt"
"github.com/minio/minio-go/v7"
"context"
)
func main() {
endpoint := "localhost:9000"
accessKeyID := "ACCESS_KEY"
secretAccessKey := "SECRET_KEY"
useSSL := false
// 初始化Minio客戶端對象
minioClient, err := minio.New(endpoint, &minio.Options{
Credentials: &minio.Credentials{
AccessKeyID: accessKeyID,
SecretAccessKey: secretAccessKey,
},
Secure: useSSL,
})
if err != nil {
fmt.Println(err)
return
}
// 刪除Bucket中的對象
ctx := context.Background()
bucketName := "test-bucket"
objectName := "test-object"
err = minioClient.RemoveObject(ctx, bucketName, objectName, minio.RemoveObjectOptions{})
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Object deleted successfully")
}
四、總結
通過上述示例代碼,我們可以看出Minio是一個非常實用的工具類,提供了方便的API接口來實現對對象存儲服務器的操作,支持多種編程語言。對於需要海量數據存儲和訪問的場景,Minio是一個不錯的選擇。
原創文章,作者:TQZNL,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/370642.html