最近由于公司需要开发社交相关产品,在开发到动态相关模块的时候,需要考虑到用户发布的图片视频等文件的存储,最后在同事的推荐下使用了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)的存储策略...