go使用MinIO搭建一个文件存储服务器

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. 初始化
client, err = minio.New(endpoint, accessKeyID, secretAccessKey, useSSL)
if err != nil {
	fmt.Println("err:", err, client)
	return false
}
参数 类型 描述
endpoint string S3兼容对象存储服务endpoint
accessKeyID string 对象存储的Access key
secretAccessKey string 对象存储的Secret key
ssl bool true代表使用HTTPS
  1. 上传文件
_, err := client.FPutObject(bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})
if err != nil {
	log.Fatalln("UploadFile", err)
	return err
}

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

参数 类型 描述
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也认为是一个对象,但是不能创建空目录,目录下必须有文件。

你可能感兴趣的:(go使用MinIO搭建一个文件存储服务器)