minio是分布式存储,可集群部署,阵列磁盘,纠错码等大数据存储必备的技术。
由于它是go语言开发的,我们用go来与它衔接:上传文件,比如图片,然后预览。
这里涉及几个重要的知识点。
一是minio永久路径的设置,传统的minio提供临时路径,通过PresignedGetObject来获得一个文件最长7天的路径。通过搜索,实际上将策略设置为public即可直接通过路径获得文件或预览图片。
二是图片缩略图,minio虽然可以设置压缩,但不支持图片缩略图,需要自己处理。
三是流式上传,前段通过fileinput批量上传文件,服务端拿到文件,直接上传到minio,不用存到临时文件夹。代码如下:
files, err := c.GetFiles("input-ke-2[]") //fileinput的经典命名
// GetFiles return multi-upload files
for i, _ := range files {
//for each fileheader, get a handle to the actual file
file, err := files[i].Open() // 关键,这里是转为具有io.reader接口的file,这个file才能上传minio
defer file.Close()
if err != nil {
logs.Error(err)
return
}
uploadInfo, err := minioClient.PutObject(context.Background(), minio_bucketname, strconv.Itoa(year)+month.String()+"/"+files[i].Filename, file, -1, minio.PutObjectOptions{ContentType: "application/octet-stream"})
问题:如何获得file的size呢?
四是子文件夹的建立,其实没有这个命令,但上传文件到bucket中的时候,文件名带上路径,就会自动建立文件夹,并且把文件放到这个文件夹内,而如果文件夹已经存在,那么也不影响。
就写这么多了,这个奇葩的csdn落魄了吗,上一个文章里贴了详细代码,总是无法通过审查,也不说原因,看来早点关门,我们另寻其他平台了。