MinIO 调研
文章目录
背景:
用于文件上传(upload file),使用 SDK 完成文件上传或者生成临时 url ,用于文件上传,可以避免 ak/sk 泄漏风险。
官方文档:
MinIO 中文入门指南:http://docs.minio.org.cn/docs/
MinIO 客户端快速入门指南:http://docs.minio.org.cn/docs/master/minio-client-quickstart-guide
MinIO Client 完全指南:http://docs.minio.org.cn/docs/master/minio-client-complete-guide
Golang Client 快速入门指南:http://docs.minio.org.cn/docs/master/golang-client-quickstart-guide
Golang Client API 参考文档:http://docs.minio.org.cn/docs/master/golang-client-api-reference
mc 相关命令使用示例
Share 命令 - 共享
share
命令安全地授予上传或下载的权限。此访问只是临时的,与远程用户和应用程序共享也是安全的。如果你想授予永久访问权限,你可以看看mc policy
命令。
生成的网址中含有编码后的访问认证信息,任何企图篡改URL的行为都会使访问无效。想了解这种机制是如何工作的,请参考Pre-Signed URL技术。
用法:
mc share [FLAGS] COMMAND
FLAGS:
--help, -h 显示帮助。
COMMANDS:
download 生成有下载权限的URL。
upload 生成有上传权限的URL。
list 列出先前共享的对象和文件夹。
子命令share upload
- 共享上传
share upload
命令生成不需要access key和secret key即可上传的URL。过期参数设置成最大有效期(不大于7天),过期之后权限自动回收。 Content-type参数限制只允许上传指定类型的文件。
Copy用法:
mc share upload [FLAGS] TARGET [TARGET...]
FLAGS:
--help, -h 显示帮助。
--recursive, -r 递归共享所有对象。
--expire, -E "168h" 设置过期时限,NN[h|m|s].
示例: 生成一个curl
命令,赋予上传到play/mybucket/myotherobject.txt
的权限。
Copymc share upload play/mybucket/myotherobject.txt
URL: https://play.min.io/mybucket/myotherobject.txt
Expire: 7 days 0 hours 0 minutes 0 seconds
Share: curl https://play.min.io/mybucket -F x-amz-date=20160408T182356Z -F x-amz-signature=de343934bd0ba38bda0903813b5738f23dde67b4065ea2ec2e4e52f6389e51e1 -F bucket=mybucket -F policy=eyJleHBpcmF0aW9uIjoiMjAxNi0wNC0xNVQxODoyMzo1NS4wMDdaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkYnVja2V0IiwibXlidWNrZXQiXSxbImVxIiwiJGtleSIsIm15b3RoZXJvYmplY3QudHh0Il0sWyJlcSIsIiR4LWFtei1kYXRlIiwiMjAxNjA0MDhUMTgyMzU2WiJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsIlEzQU0zVVE4NjdTUFFRQTQzUDJGLzIwMTYwNDA4L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 -F x-amz-algorithm=AWS4-HMAC-SHA256 -F x-amz-credential=Q3AM3UQ867SPQQA43P2F/20160408/us-east-1/s3/aws4_request -F key=myotherobject.txt -F file=@<FILE>
<FILE>
为上传的文件路径
子命令share list
- 列出之前的共享
share list
列出没未过期的共享URL。
Copy 用法:
mc share list COMMAND
COMMAND:
upload: 列出先前共享的有上传权限的URL。
download: 列出先前共享的有下载权限的URL。
Golang SDK 示例 - 文件上传
package main
import (
"github.com/minio/minio-go/v6"
"log"
)
func main() {
endpoint := "localhost:8998"
accessKeyID := "minio"
secretAccessKey := "minio123"
useSSL := false
// 初使化minio client对象。
minioClient, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL)
if err != nil {
log.Fatalln(err)
}
// 创建一个叫mymusic的存储桶。
bucketName := "your_own_bucket"
location := "shanghai"
err = minioClient.MakeBucket(bucketName, location)
if err != nil {
// 检查存储桶是否已经存在。
exists, err := minioClient.BucketExists(bucketName)
if err == nil && exists {
log.Printf("We already own %s\n", bucketName)
} else {
log.Fatalln(err)
}
}
log.Printf("Successfully created %s\n", bucketName)
// 上传一个zip文件。
objectName := "3.log"
filePath := "/tmp/3.log"
contentType := "application/zip" // 传输的文件类型
// 使用FPutObject上传一个zip文件。
n, err := minioClient.FPutObject(bucketName, objectName, filePath, minio.PutObjectOptions{ContentType:contentType})
if err != nil {
log.Fatalln(err)
}
log.Printf("Successfully uploaded %s of size %d\n", objectName, n)
}