package Minio import ( "dsSupport/Utils/CommonUtil" "dsSupport/Utils/ConfigUtil" "github.com/gin-gonic/gin" "github.com/minio/minio-go/v6" "log" "net/http" "net/url" "strings" "time" ) // 多集群实验(minio 集群搭建) // https://www.cnblogs.com/rongfengliang/p/9197315.html //模块的路由配置 func Routers(r *gin.RouterGroup) { //注册接口路径 rr := r.Group("/minio") //上传URL签名 rr.GET("/presignedUrl", presignedUrl) //获取下载URL地址 rr.GET("/getUrl", getUrl) return } //声明s3的客户端实例 var s3Client *minio.Client var err error var bucketName string //初始化 func init() { bucketName = ConfigUtil.MinioBacketName s3Client, err = minio.New(ConfigUtil.MinioEndpoint, ConfigUtil.MinioAk, ConfigUtil.MinioSk, false) if err != nil { log.Fatalln(err) } } /** 功能:获取下载URL地址 作者:黄海 时间:2020-07-16 http://127.0.0.1:9000/dsSupport/minio/getUrl?name=62922248-63CD-4AA5-AD5C-1AA44ADAC603.mov */ func getUrl(c *gin.Context) { name := c.Query("name") reqParams := make(url.Values) reqParams.Set("response-content-disposition", "attachment; filename=\""+name+"\"") presignedURL, err := s3Client.PresignedGetObject(bucketName, name, time.Duration(1000)*time.Second*60, reqParams) if err != nil { log.Fatalln(err) } c.String(http.StatusOK, presignedURL.String()) } /** 功能:生成上传的签名 作者:黄海 时间:2020-07-16 */ func presignedUrl(c *gin.Context) { //换成uuid文件格式 name := c.Query("name") ext := strings.Split(name, ".")[1] name = CommonUtil.GetUUID() + "." + ext presignedURL, err := s3Client.PresignedPutObject(bucketName, name, time.Duration(1000)*time.Second*300) if err != nil { c.String(http.StatusInternalServerError, "发生了严重错误!") return } c.String(http.StatusOK, presignedURL.String()) }