MinIO简介

Minio是Apache License v2.0下发布的对象存储服务器。它与Amazon S3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB
Minio服务器足够轻,可以与应用程序堆栈捆绑在一起,类似于NodeJS,Redis和MySQL。https://docs.minio.io/

常用的API(Golang SDK)

  1. New 初始化实例
  2. MakeBucket 新建桶
  3. ListBucket 桶列表
  4. BucketExists 检查桶是否存在
  5. GetObject/PutObject 对象流的上传下载操作
  6. FGetObject/FPutObject 文件的上传下载操作
  7. SetBucketPolicy/GetBucketPolicy 设置/获取桶或者对象前缀的访问权限

在golang中开发基于MinIO的Http接口的文件服务器

  1. 初始化
参数 类型 描述
endpoint string S3兼容对象存储服务endpoint
accessKeyID string 对象存储的Access key
secretAccessKey string 对象存储的Secret key
ssl bool true代表使用HTTPS
  1. 上传文件

第一个返回值为文件上传的字节数

参数 类型 描述
bucketName string 存储桶名称
objectName string 对象的名称
filePath string 要上传的文件的路径
opts minio.PutObjectOptions 允许用户设置可选的自定义元数据,content-type,content-encoding,content-disposition以及cache-control headers,传递加密模块以加密对象,并可选地设置multipart put操作的线程数量。

上传文件的时,选用的是FPutObject接口,该接口上传的时候本地文件,需要先用gin框架中的POST接口,利用FORM-DATA数据流,将文件上传到服务器,然后将文件通过MinIO的FPutObject接口上传到服务器部署的MinIO中,可以部署集群模式。

SDK中遇到的坑

  1. 新建桶(MakeBucket)
  2. 新加桶无访问权限问题(SetBucketPllicy)
  3. 对于上传文件时如何加入子目录(FPutObject)
新建桶

使用MakeBucket接口调用,要BucketExists配合检查该桶是否已存在,新创建的桶。

新加桶无访问权限问题

上传文件之后是无法访问的,因为读写权限没开,这时候需要使用SetBucketPolicy来加权限,一般加读权限即可。

子目录

对于桶的目录数,免费的数量是有限的,如果不想花费金钱维护,桶的创建,一般用管理员控制,使用这只需维护桶下的目录的创建和管理即可。
对于子目录,在FPutObject中,bucketName参数是桶的名称,不能修改与添加子目录,而objectName参数是对象名称,对子目录,MinIO也认为是一个对象,但是不能创建空目录,目录下必须有文件。