对象存储minio的使用| 青训营笔记

246 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

前言

为了在项目中存储上传的视频核封面,使用对象的方式

什么是minio

MinIO 提供高性能、与S3 兼容的对象存储系统,让你自己能够构建自己的云储存服务。
MinIO原生支持 Kubernetes,它可用于每个独立的公共云、每个 Kubernetes 发行版、私有云和边缘的对象存储套件。
MinIO是软件定义的,不需要购买其他任何硬件,在 GNU AGPL v3 下是 100% 开源的。

  • 简单
  • 高性能
  • k8s原生支持

minio搭建

下载docker镜像

docker pull minio/minio

运行minio


docker run -p 9000:9000 -p 9090:9090 \
     --net=host \
     --name minio \
     -d --restart=always \
     -e "MINIO_ACCESS_KEY=minioadmin" \
     -e "MINIO_SECRET_KEY=minioadmin" \
     -v /home/minio/data:/data \
     -v /home/minio/config:/root/.minio \
     minio/minio server \
     MINIO_SEREVR_URL=http://宿主机ip:9000  \
     /data --console-address ":9090" -address ":9000"

需要注意的点

在上面如果不加 MINIO_SEREVR_URL,会导致在使用的时候url签名错误,无法下载文件

使用实例

package main

import (
	"context"
	"fmt"
	"io/ioutil"
	"log"
	"os"

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

func main() {
	// 建立一个MinIO客户端对象
	endpoint := "minio.example.com" // MinIO服务的地址
	accessKeyID := "your-access-key-id" // Access Key ID
	secretAccessKey := "your-secret-access-key" // Secret Access Key
	useSSL := true // 是否启用SSL
	minioClient, err := minio.New(endpoint, &minio.Options{
		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
		Secure: useSSL,
	})
	if err != nil {
		log.Fatalln(err)
	}

	// 上传文件到MinIO存储桶
	bucketName := "example-bucket" // 存储桶名称
	objectName := "example-object.txt" // 上传的对象名称
	filePath := "/path/to/example-file.txt" // 本地文件路径

	// 打开本地文件
	file, err := os.Open(filePath)
	if err != nil {
		log.Fatalln(err)
	}
	defer file.Close()

	// 获取本地文件的大小
	fileInfo, err := file.Stat()
	if err != nil {
		log.Fatalln(err)
	}
	fileSize := fileInfo.Size()

	// 创建一个上下文对象,用于取消上传操作
	ctx := context.Background()

	// 上传文件到MinIO
	n, err := minioClient.PutObject(ctx, bucketName, objectName, file, fileSize, minio.PutObjectOptions{})
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Printf("Successfully uploaded %s of size %d\n", objectName, n)
}

  • endpoint 是 MinIO 服务的地址。
  • accessKeyIDsecretAccessKey 是访问 MinIO 服务的凭证。在实际应用中,应该使用安全方式存储这些敏感信息,例如环境变量或配置文件。
  • useSSL 指定是否启用 SSL 加密。
  • minio.New 函数返回一个 *minio.Client 对象,用于与 MinIO 服务进行交互。