最近由于公司需要开发社交相关产品,在开发到动态相关模块的时候,需要考虑到用户发布的图片视频等文件的存储,最后在同事的推荐下使用了minio,这里简单的做一个小小的记录。

minio存储是类似于数据库,你可以创建很多个bucket,不同的bucket存放不同的类型,或者是按个人需要进行分类。

minio使用需要注意的是文件存储的周期,以及存储返回的URL的有效期一般是在7天,如果需要长期保存,需要在部署的时候修改相关配置文件,修改桶(bucket)的存储策略。

minio相关文档参考链接( MinIO Quickstart Guide| Minio中文文档 )

这里简单讲一下我的使用过程,我的需求是将文件存储进去并得到一个永久的可访问的URL,注意这里说的是直接访问的,区别于点击即下载的URL。满足我这个需求就需要对一以下几点进行修改。

1、存储返回的URL公开可访问,可在浏览器登录后修改桶的访问权限为public。

2、存储返回的URL为永久(这里的永久并不是真正的永久,只是把存储时间设置的足够的长。),这里老版本是直接可以在浏览器上配置的,新版本目前不行,所以参考一下官方文档,在部署的时候进行配置。

下面提供一下golang调用minio api存储并返回URL的代码,minio也提供了很多的其他api在官方文档。

const endPoint string = "58.220.66.83:9000" //部署时的ip+port
const accessKeyID string = "XXXXXX" //部署时的私钥账户
const secretAccessKey string = "XXXXXXXX"//部署时的私钥
const useSSL bool = false //是否使用ssl
func UploadToMinio(objectName string, file *multipart.FileHeader, contentType string) (string, error) {
	// 初使化 minio client对象
	minioClient, err := minio.New(endPoint, accessKeyID, secretAccessKey, useSSL)
	if err != nil {
		return "", err
	bucketName := "test"
	src, err := file.Open()
	if err != nil {
		return "", err
	defer src.Close()
	// 使用PutObject上传一个zip文件
	_, err = minioClient.PutObject(bucketName, objectName, src, file.Size, minio.PutObjectOptions{ContentType: contentType})
	if err != nil {
		return "", err
	urlString, err := minioClient.PresignedGetObject(bucketName, objectName, time.Second*24*60*60, make(url.Values))
	if err != nil {
		return "", err
	return urlString.String(), nil

本文讲述的不是很仔细,仅供个人开发时做个参考了解,详细内容还请参照官方文档。

最近由于公司需要开发社交相关产品,在开发到动态相关模块的时候,需要考虑到用户发布的图片视频等文件的存储,最后在同事的推荐下使用了minio,这里简单的做一个小小的记录。 minio存储是类似于数据库,你可以创建很多个bucket,不同的bucket存放不同的类型,或者是按个人需要进行分类。 minio使用需要注意的是文件存储的周期,以及存储返回的URL的有效期一般是在7天,如果需要长期保存,需要在部署的时候修改相关配置文件,修改桶(bucket)的存储策略...