MinIO简介
Minio是Apache License v2.0下发布的对象存储服务器。它与Amazon S3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB
Minio服务器足够轻,可以与应用程序堆栈捆绑在一起,类似于NodeJS,Redis和MySQL。https://docs.minio.io/
常用的API(Golang SDK)
- New 初始化实例
- MakeBucket 新建桶
- ListBucket 桶列表
- BucketExists 检查桶是否存在
- GetObject/PutObject 对象流的上传下载操作
- FGetObject/FPutObject 文件的上传下载操作
- SetBucketPolicy/GetBucketPolicy 设置/获取桶或者对象前缀的访问权限
在golang中开发基于MinIO的Http接口的文件服务器
- 初始化
| 参数 | 类型 | 描述 |
|---|---|---|
| endpoint | string | S3兼容对象存储服务endpoint |
| accessKeyID | string | 对象存储的Access key |
| secretAccessKey | string | 对象存储的Secret key |
| ssl | bool | true代表使用HTTPS |
- 上传文件
第一个返回值为文件上传的字节数
| 参数 | 类型 | 描述 |
|---|---|---|
| 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中遇到的坑
- 新建桶(MakeBucket)
- 新加桶无访问权限问题(SetBucketPllicy)
- 对于上传文件时如何加入子目录(FPutObject)
新建桶
使用MakeBucket接口调用,要BucketExists配合检查该桶是否已存在,新创建的桶。
新加桶无访问权限问题
上传文件之后是无法访问的,因为读写权限没开,这时候需要使用SetBucketPolicy来加权限,一般加读权限即可。
子目录
对于桶的目录数,免费的数量是有限的,如果不想花费金钱维护,桶的创建,一般用管理员控制,使用这只需维护桶下的目录的创建和管理即可。
对于子目录,在FPutObject中,bucketName参数是桶的名称,不能修改与添加子目录,而objectName参数是对象名称,对子目录,MinIO也认为是一个对象,但是不能创建空目录,目录下必须有文件。