Ver código fonte

亚马逊s3、上传优化

hsun 1 ano atrás
pai
commit
3feb91089b
13 arquivos alterados com 1011 adições e 599 exclusões
  1. 32 20
      controllers/data_manage/chart_info.go
  2. 47 25
      controllers/report.go
  3. 183 104
      controllers/resource.go
  4. 1 0
      go.mod
  5. 1 0
      go.sum
  6. 1 1
      models/report.go
  7. 130 0
      services/aws_s3.go
  8. 348 291
      services/minio.go
  9. 167 122
      services/oss.go
  10. 22 11
      services/report.go
  11. 44 25
      services/video.go
  12. 29 0
      utils/config.go
  13. 6 0
      utils/constants.go

+ 32 - 20
controllers/data_manage/chart_info.go

@@ -1685,7 +1685,7 @@ func (this *ChartInfoController) ChartInfoBase64Upload() {
 
 	uploadDir := "static/images/"
 	if !utils.FileIsExist(uploadDir) {
-		err := os.MkdirAll(uploadDir, 777)
+		err := os.MkdirAll(uploadDir, utils.DIR_MOD)
 		if err != nil {
 			br.Msg = "图表保存失败"
 			br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
@@ -1693,7 +1693,7 @@ func (this *ChartInfoController) ChartInfoBase64Upload() {
 		}
 	}
 
-	var saveToOssPath string
+	//var saveToOssPath string
 	randStr := utils.GetRandStringNoSpecialChar(28)
 	var fileName, outFileName string
 	fileName = randStr + ".txt"
@@ -1739,27 +1739,39 @@ func (this *ChartInfoController) ChartInfoBase64Upload() {
 		os.Remove(fileName)
 	}()
 
-	saveToOssPath = uploadDir + time.Now().Format("200601/20060102/")
-	saveToOssPath += outFileName
+	//saveToOssPath = uploadDir + time.Now().Format("200601/20060102/")
+	//saveToOssPath += outFileName
 
 	//上传到阿里云 和 minio
 	resourceUrl := ``
-	if utils.ObjectStorageClient == "minio" {
-		err = services.UploadFileToMinIo("", outFileName, saveToOssPath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-		resourceUrl = utils.MinIoImghost + saveToOssPath
-	} else {
-		err = services.UploadFileToAliyun("", outFileName, saveToOssPath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-		resourceUrl = utils.Imghost + saveToOssPath
+	//if utils.ObjectStorageClient == "minio" {
+	//	err = services.UploadFileToMinIo("", outFileName, saveToOssPath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	resourceUrl = utils.MinIoImghost + saveToOssPath
+	//} else {
+	//	err = services.UploadFileToAliyun("", outFileName, saveToOssPath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	resourceUrl = utils.Imghost + saveToOssPath
+	//}
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "初始化OSS服务失败"
+		return
+	}
+	resourceUrl, err = ossClient.UploadFile(outFileName, outFileName, "")
+	if err != nil {
+		br.Msg = "文件上传失败"
+		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+		return
 	}
 
 	resp.ResourceUrl = resourceUrl

+ 47 - 25
controllers/report.go

@@ -907,20 +907,32 @@ func (this *ReportController) Upload() {
 
 	resourceUrl := ``
 	//上传到阿里云 和 minio
-	if utils.ObjectStorageClient == "minio" {
-		resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-	} else {
-		resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
+	//if utils.ObjectStorageClient == "minio" {
+	//	resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//} else {
+	//	resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//}
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "初始化OSS服务失败"
+		return
+	}
+	resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
+	if err != nil {
+		br.Msg = "文件上传失败"
+		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+		return
 	}
 
 	defer func() {
@@ -1145,16 +1157,26 @@ func (this *ReportUploadCommonController) UploadImg() {
 	}
 	resourceUrl := ``
 	//上传到阿里云 和 minio
-	if utils.ObjectStorageClient == "minio" {
-		resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
-		if err != nil {
-			return
-		}
-	} else {
-		resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
-		if err != nil {
-			return
-		}
+	//if utils.ObjectStorageClient == "minio" {
+	//	resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
+	//	if err != nil {
+	//		return
+	//	}
+	//} else {
+	//	resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
+	//	if err != nil {
+	//		return
+	//	}
+	//}
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		err = fmt.Errorf("初始化OSS服务失败")
+		return
+	}
+	resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
+	if err != nil {
+		err = fmt.Errorf("文件上传失败, Err: %s", err.Error())
+		return
 	}
 
 	defer func() {
@@ -2358,7 +2380,7 @@ func (this *ReportController) GetSunCode() {
 		return
 	}
 	if item != nil {
-		sunCodeUrl = item.SuncodeURL
+		sunCodeUrl = item.SuncodeUrl
 	}
 
 	if sunCodeUrl == "" {

+ 183 - 104
controllers/resource.go

@@ -62,20 +62,32 @@ func (this *ResourceController) Upload() {
 	}
 	resourceUrl := ``
 	//上传到阿里云 和 minio
-	if utils.ObjectStorageClient == "minio" {
-		resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-	} else {
-		resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
+	//if utils.ObjectStorageClient == "minio" {
+	//	resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//} else {
+	//	resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//}
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "初始化OSS服务失败"
+		return
+	}
+	resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
+	if err != nil {
+		br.Msg = "文件上传失败"
+		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+		return
 	}
 
 	defer func() {
@@ -239,28 +251,41 @@ func (this *ResourceController) VideoUpload() {
 	utils.FileLog.Info("start update oss ")
 	utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
 
-	savePath := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
-	savePath += fileName
+	//savePath := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
+	//savePath += fileName
 
 	//上传到阿里云 和 minio
 	resourceUrl := ``
-	if utils.ObjectStorageClient == "minio" {
-		err = services.UploadVideoToMinIo(fileName, fpath, savePath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-		resourceUrl = utils.MinIoImghost + savePath
-	} else {
-		err = services.UploadVideoAliyun(fileName, fpath, savePath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-		resourceUrl = utils.Imghost + savePath
+	//if utils.ObjectStorageClient == "minio" {
+	//	err = services.UploadVideoToMinIo(fileName, fpath, savePath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	resourceUrl = utils.MinIoImghost + savePath
+	//} else {
+	//	err = services.UploadVideoAliyun(fileName, fpath, savePath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	resourceUrl = utils.Imghost + savePath
+	//}
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "初始化OSS服务失败"
+		return
+	}
+	resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
+	if err != nil {
+		br.Msg = "文件上传失败"
+		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+		return
 	}
+
 	utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
 	utils.FileLog.Info("end update oss ")
 
@@ -416,26 +441,38 @@ func (this *ResourceController) VoiceUpload() {
 	utils.FileLog.Info("start update oss ")
 	utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
 
-	savePath := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
-	savePath += fileName
+	//savePath := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
+	//savePath += fileName
 	//上传到阿里云 和 minio
 	resourceUrl := ``
-	if utils.ObjectStorageClient == "minio" {
-		err = services.UploadVideoToMinIo(fileName, fpath, savePath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-		resourceUrl = utils.MinIoImghost + savePath
-	} else {
-		err = services.UploadVideoAliyun(fileName, fpath, savePath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-		resourceUrl = utils.Imghost + savePath
+	//if utils.ObjectStorageClient == "minio" {
+	//	err = services.UploadVideoToMinIo(fileName, fpath, savePath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	resourceUrl = utils.MinIoImghost + savePath
+	//} else {
+	//	err = services.UploadVideoAliyun(fileName, fpath, savePath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	resourceUrl = utils.Imghost + savePath
+	//}
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "初始化OSS服务失败"
+		return
+	}
+	resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
+	if err != nil {
+		br.Msg = "文件上传失败"
+		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+		return
 	}
 	utils.FileLog.Info(fmt.Sprintf("%s:", time.Now().Format(utils.FormatDateTime)))
 	utils.FileLog.Info("end update oss ")
@@ -584,22 +621,34 @@ func (this *ResourceController) UploadImageBase64() {
 
 	//上传到阿里云 和 minio
 	resourceUrl := ``
-	if utils.ObjectStorageClient == "minio" {
-		err = services.UploadFileToMinIo(fileName, fpath, savePath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-		resourceUrl = utils.MinIoImghost + savePath
-	} else {
-		err = services.UploadFileToAliyun(fileName, fpath, savePath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-		resourceUrl = utils.Imghost + savePath
+	//if utils.ObjectStorageClient == "minio" {
+	//	err = services.UploadFileToMinIo(fileName, fpath, savePath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	resourceUrl = utils.MinIoImghost + savePath
+	//} else {
+	//	err = services.UploadFileToAliyun(fileName, fpath, savePath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	resourceUrl = utils.Imghost + savePath
+	//}
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "初始化OSS服务失败"
+		return
+	}
+	resourceUrl, err = ossClient.UploadFile(fileName, fpath, savePath)
+	if err != nil {
+		br.Msg = "文件上传失败"
+		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+		return
 	}
 	utils.FileLog.Info("%s:", time.Now().Format(utils.FormatDateTime))
 	utils.FileLog.Info("end update oss ")
@@ -725,20 +774,32 @@ func (this *ResourceController) UploadV2() {
 	}
 	resourceUrl := ``
 	//上传到阿里云 和 minio
-	if utils.ObjectStorageClient == "minio" {
-		resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
-	} else {
-		resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
-		if err != nil {
-			br.Msg = "文件上传失败"
-			br.ErrMsg = "文件上传失败,Err:" + err.Error()
-			return
-		}
+	//if utils.ObjectStorageClient == "minio" {
+	//	resourceUrl, err = services.UploadImgToMinIo(fileName, fpath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//} else {
+	//	resourceUrl, err = services.UploadAliyunV2(fileName, fpath)
+	//	if err != nil {
+	//		br.Msg = "文件上传失败"
+	//		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+	//		return
+	//	}
+	//}
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "初始化OSS服务失败"
+		return
+	}
+	resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
+	if err != nil {
+		br.Msg = "文件上传失败"
+		br.ErrMsg = "文件上传失败,Err:" + err.Error()
+		return
 	}
 
 	defer func() {
@@ -777,31 +838,49 @@ func (this *ResourceController) OssSTSToken() {
 		this.ServeJSON()
 	}()
 
-	source, _ := this.GetInt("StorageSource")
-
-	if source == utils.STORAGESOURCE_OSS {
-		resp, err := services.GetOssSTSToken()
-		if err != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取STSToken失败, Err: " + err.Error()
-			return
-		}
-		br.Data = resp
-		br.Msg = "获取成功"
-		br.Ret = 200
-		br.Success = true
-	} else if source == utils.STORAGESOURCE_MINIO {
-		resp, err := services.GetMinIOSTSToken()
-		if err != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取STSToken失败, Err: " + err.Error()
-			return
-		}
-		br.Data = resp
-		br.Msg = "获取成功"
-		br.Ret = 200
-		br.Success = true
+	ossClient := services.NewOssClient()
+	if ossClient == nil {
+		br.Msg = "上传失败"
+		br.ErrMsg = "初始化OSS服务失败"
+		return
 	}
+	resp, e := ossClient.GetUploadToken()
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取OSS上传Token失败, Err: " + e.Error()
+		return
+	}
+
+	br.Data = resp
+	br.Msg = "获取成功"
+	br.Ret = 200
+	br.Success = true
+
+	//source, _ := this.GetInt("StorageSource")
+	//
+	//if source == utils.STORAGESOURCE_OSS {
+	//	resp, err := services.GetOssSTSToken()
+	//	if err != nil {
+	//		br.Msg = "获取失败"
+	//		br.ErrMsg = "获取STSToken失败, Err: " + err.Error()
+	//		return
+	//	}
+	//	br.Data = resp
+	//	br.Msg = "获取成功"
+	//	br.Ret = 200
+	//	br.Success = true
+	//} else if source == utils.STORAGESOURCE_MINIO {
+	//	resp, err := services.GetMinIOSTSToken()
+	//	if err != nil {
+	//		br.Msg = "获取失败"
+	//		br.ErrMsg = "获取STSToken失败, Err: " + err.Error()
+	//		return
+	//	}
+	//	br.Data = resp
+	//	br.Msg = "获取成功"
+	//	br.Ret = 200
+	//	br.Success = true
+	//}
 }
 
 // WechatWarning 小程序前端预警提示

+ 1 - 0
go.mod

@@ -8,6 +8,7 @@ require (
 	github.com/alibabacloud-go/dm-20151123/v2 v2.0.1
 	github.com/alibabacloud-go/tea v1.2.0
 	github.com/alibabacloud-go/tea-utils/v2 v2.0.1
+	github.com/aws/aws-sdk-go v1.42.23
 	github.com/beego/bee/v2 v2.0.4
 	github.com/beego/beego/v2 v2.0.7
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible

+ 1 - 0
go.sum

@@ -86,6 +86,7 @@ github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211218165449-dd623ecc2f02 h1:o
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211218165449-dd623ecc2f02/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
 github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
 github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
+github.com/aws/aws-sdk-go v1.42.23 h1:V0V5hqMEyVelgpu1e4gMPVCJ+KhmscdNxP/NWP1iCOA=
 github.com/aws/aws-sdk-go v1.42.23/go.mod h1:gyRszuZ/icHmHAVE4gc/r+cfCmhA1AD+vqfWbgI+eHs=
 github.com/beego/bee/v2 v2.0.4 h1:nEjPwxJ8D+cr54eWChJGoGRH7bJ7OQwbhx8rU0OQf7E=
 github.com/beego/bee/v2 v2.0.4/go.mod h1:wq0YrEmPcdNfDNpaUgiTkaW9zso7M8n0HCCShEBOzM0=

+ 1 - 1
models/report.go

@@ -687,7 +687,7 @@ type YbPcSuncode struct {
 	Scene      string    `gorm:"column:scene;type:varchar(255);not null;default:0" json:"scene"` // 微信scene
 	SceneMd5   string    `gorm:"column:scene_md5;type:varchar(255);not null" json:"sceneMd5"`
 	CodePage   string    `gorm:"column:code_page;type:varchar(255);not null;default:''" json:"codePage"`     // 路径
-	SuncodeURL string    `gorm:"column:suncode_url;type:varchar(255);not null;default:''" json:"suncodeUrl"` // 太阳码储存地址
+	SuncodeUrl string    `gorm:"column:suncode_url;type:varchar(255);not null;default:''" json:"suncodeUrl"` // 太阳码储存地址
 	CreateTime time.Time `gorm:"column:create_time;type:timestamp;default:CURRENT_TIMESTAMP" json:"createTime"`
 }
 

+ 130 - 0
services/aws_s3.go

@@ -0,0 +1,130 @@
+package services
+
+import (
+	"bytes"
+	"eta/eta_mobile/utils"
+	"fmt"
+	"github.com/aws/aws-sdk-go/aws"
+	"github.com/aws/aws-sdk-go/aws/credentials"
+	"github.com/aws/aws-sdk-go/aws/session"
+	"github.com/aws/aws-sdk-go/service/s3"
+	"io/ioutil"
+	"time"
+)
+
+type OssClient interface {
+	UploadFile(string, string, string) (string, error)
+	GetUploadToken() (OssToken, error)
+}
+
+func NewOssClient() OssClient {
+	switch utils.ObjectStorageClient {
+	case utils.STORAGESOURCE_MINIO_NAME:
+		return new(MinioOss)
+	case utils.STORAGESOURCE_S3_NAME:
+		return new(S3Oss)
+	default:
+		// 默认使用阿里云OSS
+		return new(AliOss)
+	}
+}
+
+// OssToken 此处为了兼容前端那边所以有重复的
+type OssToken struct {
+	AccessKeyId string
+	SecretKeyId string
+	RegionId    string
+	Bucketname  string
+	Endpoint    string
+	ImgHost     string
+	UseSSL      string
+	Port        string
+	//AccessKeyId     string
+	AccessKeySecret string
+	SecurityToken   string
+	ExpiredTime     string
+	//RegionId        string
+	//Bucketname      string
+	//Endpoint        string
+	Imghost      string
+	S3ForceStyle bool
+	S3Protocol   string
+}
+
+type S3Oss struct{}
+
+func (m *S3Oss) UploadFile(fileName, localFile, savePath string) (resourceUrl string, err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err.Error())
+		}
+	}()
+
+	endpoint := utils.S3Endpoint
+	accessKey := utils.S3AccessKeyId
+	secretKey := utils.S3AccessKeySecret
+	region := utils.S3Region
+	bucketName := utils.S3BucketName
+	uploadDir := utils.S3UploadDir
+	resourceHost := utils.S3Host
+	forceStyle := utils.S3ForceStyle
+	hostStyle := true // 默认true, 使用`endpoint/bucket_name`这种HOST格式
+	if forceStyle == "false" {
+		hostStyle = false
+	}
+
+	// 创建AWS会话
+	sess, e := session.NewSession(&aws.Config{
+		Region:           aws.String(region),
+		Credentials:      credentials.NewStaticCredentials(accessKey, secretKey, ""),
+		Endpoint:         aws.String(endpoint),
+		S3ForcePathStyle: aws.Bool(hostStyle),
+	})
+	if e != nil {
+		err = fmt.Errorf("new session err: %s", e.Error())
+		return
+	}
+
+	// 创建S3服务客户端
+	client := s3.New(sess)
+
+	// 读取文件内容
+	fileContent, e := ioutil.ReadFile(localFile)
+	if e != nil {
+		err = fmt.Errorf("read file err: %s", e.Error())
+		return
+	}
+
+	path := savePath
+	if savePath == "" {
+		path = uploadDir + time.Now().Format("200601/20060102/") + fileName
+	}
+	_, e = client.PutObject(&s3.PutObjectInput{
+		Bucket: aws.String(bucketName),
+		Key:    aws.String(path),
+		Body:   bytes.NewReader(fileContent),
+	})
+	if e != nil {
+		err = fmt.Errorf("put object err: %s", e.Error())
+		return
+	}
+	resourceUrl = resourceHost + path
+	return
+}
+
+func (m *S3Oss) GetUploadToken() (token OssToken, err error) {
+	token.Endpoint = utils.S3Endpoint
+	token.AccessKeyId = utils.S3AccessKeyId
+	token.AccessKeySecret = utils.S3AccessKeySecret
+	token.RegionId = utils.S3Region
+	token.Bucketname = utils.S3BucketName
+	token.ImgHost = utils.S3Host
+	token.Port = utils.S3EndpointPort
+	hostStyle := true // 默认true, 使用`endpoint/bucket_name`这种HOST格式
+	if utils.S3ForceStyle == "false" {
+		hostStyle = false
+	}
+	token.S3ForceStyle = hostStyle
+	token.S3Protocol = utils.S3Protocol
+	return
+}

+ 348 - 291
services/minio.go

@@ -7,305 +7,354 @@ import (
 	"github.com/minio/minio-go/v7"
 	"github.com/minio/minio-go/v7/pkg/credentials"
 	"log"
-	"os"
 	"time"
 )
 
-func GetMinIOSTSToken() (item *Token, err error) {
-	// MinIO服务的访问信息
-	item = new(Token)
-	//useSSL := false
-	//if utils.MinIoUseSSL == "true" {
-	//	useSSL = true
-	//}
-	// 创建MinIO客户端
-	//minioClient, err := minio.New(utils.MinIoEndpoint, &minio.Options{
-	//	Creds:  credentials.NewStaticV4(utils.MinIoAccessKeyId, utils.MinIoAccessKeySecret, ""),
-	//	Secure: useSSL,
-	//})
-	//if err != nil {
-	//	return nil, err
-	//}
-	// 设置STS凭证请求参数
-	//policy := `{
-	//    "Version": "2012-10-17",
-	//    "Statement": [
-	//        {
-	//            "Sid": "",
-	//            "Effect": "Allow",
-	//            "Principal": {"AWS": "arn:aws:iam::1234567890:root"},
-	//            "Action": "s3:GetObject",
-	//            "Resource": "arn:aws:s3:::<YourBucketName>/*"
-	//        }
-	//    ]
-	//}`
-	//expiry := time.Hour * 24 // STS凭证的过期时间
-	//获取STS凭证
-	//stsCredentials, err := minioClient.PresignedPutObject(context.Background(), "etastatic", "myobject", expiry)
-	//if err != nil {
-	//	return
-	//}
-	item.AccessKeyId = utils.MinIoAccessKeyId
-	item.SecretKeyId = utils.MinIoAccessKeySecret
-	item.Endpoint = utils.MinIoEndpoint
-	item.ImgHost = utils.MinIoImghost
-	item.Bucketname = utils.MinIoBucketname
-	item.UseSSL = utils.MinIoUseSSL
-	item.RegionId = utils.MinIoRegion
-	item.Port = utils.MinIoPort
-	return
-}
+//func GetMinIOSTSToken() (item *Token, err error) {
+//	// MinIO服务的访问信息
+//	item = new(Token)
+//	//useSSL := false
+//	//if utils.MinIoUseSSL == "true" {
+//	//	useSSL = true
+//	//}
+//	// 创建MinIO客户端
+//	//minioClient, err := minio.New(utils.MinIoEndpoint, &minio.Options{
+//	//	Creds:  credentials.NewStaticV4(utils.MinIoAccessKeyId, utils.MinIoAccessKeySecret, ""),
+//	//	Secure: useSSL,
+//	//})
+//	//if err != nil {
+//	//	return nil, err
+//	//}
+//	// 设置STS凭证请求参数
+//	//policy := `{
+//	//    "Version": "2012-10-17",
+//	//    "Statement": [
+//	//        {
+//	//            "Sid": "",
+//	//            "Effect": "Allow",
+//	//            "Principal": {"AWS": "arn:aws:iam::1234567890:root"},
+//	//            "Action": "s3:GetObject",
+//	//            "Resource": "arn:aws:s3:::<YourBucketName>/*"
+//	//        }
+//	//    ]
+//	//}`
+//	//expiry := time.Hour * 24 // STS凭证的过期时间
+//	//获取STS凭证
+//	//stsCredentials, err := minioClient.PresignedPutObject(context.Background(), "etastatic", "myobject", expiry)
+//	//if err != nil {
+//	//	return
+//	//}
+//	item.AccessKeyId = utils.MinIoAccessKeyId
+//	item.SecretKeyId = utils.MinIoAccessKeySecret
+//	item.Endpoint = utils.MinIoEndpoint
+//	item.ImgHost = utils.MinIoImghost
+//	item.Bucketname = utils.MinIoBucketname
+//	item.UseSSL = utils.MinIoUseSSL
+//	item.RegionId = utils.MinIoRegion
+//	item.Port = utils.MinIoPort
+//	return
+//}
 
-type Token struct {
-	AccessKeyId string
-	SecretKeyId string
-	RegionId    string
-	Bucketname  string
-	Endpoint    string
-	ImgHost     string
-	UseSSL      string
-	Port        string
-}
+//type Token struct {
+//	AccessKeyId string
+//	SecretKeyId string
+//	RegionId    string
+//	Bucketname  string
+//	Endpoint    string
+//	ImgHost     string
+//	UseSSL      string
+//	Port        string
+//}
 
-func UploadMinIo() {
-	ctx := context.Background()
-	endpoint := "8.136.199.33:9000/"
-	accessKeyID := "LfQ8uiJiLP7vLxjRrmNW"
-	secretAccessKey := "IszGVHsNicJMQxHC46cYFtbrOiapo0ynwOIJ6c2R"
-	useSSL := false
-
-	// Initialize minio client object.
-	minioClient, err := minio.New(endpoint, &minio.Options{
-		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
-		Secure: useSSL,
-	})
-	if err != nil {
-		log.Fatalln(err)
-	}
-
-	// Make a new bucket called mymusic.
-	bucketName := "etastatic"
-	location := "/"
-
-	err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location})
-	if err != nil {
-		// Check to see if we already own this bucket (which happens if you run this twice)
-		exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
-		if errBucketExists == nil && exists {
-			log.Printf("We already own %s\n", bucketName)
-		} else {
-			log.Fatalln(err)
-		}
-	} else {
-		log.Printf("Successfully created %s\n", bucketName)
-	}
-	//buckets, err := minioClient.ListBuckets(ctx)
-	//for _, bucket := range buckets {
-	//	fmt.Println(bucket)
-	//}
-	// Upload the zip file
-	objectName := "1111.xlsx"
-	filePath := "/Users/xi/Desktop/1111.xlsx"
-	contentType := "application/xlsx"
-
-	// Upload the zip file with FPutObject
-	info, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})
-	if err != nil {
-		log.Fatalln(err)
-	}
-
-	log.Printf("Successfully uploaded %s of size %d\n", objectName, info.Size)
-}
+//func UploadMinIo() {
+//	ctx := context.Background()
+//	endpoint := "8.136.199.33:9000/"
+//	accessKeyID := "LfQ8uiJiLP7vLxjRrmNW"
+//	secretAccessKey := "IszGVHsNicJMQxHC46cYFtbrOiapo0ynwOIJ6c2R"
+//	useSSL := false
+//
+//	// Initialize minio client object.
+//	minioClient, err := minio.New(endpoint, &minio.Options{
+//		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
+//		Secure: useSSL,
+//	})
+//	if err != nil {
+//		log.Fatalln(err)
+//	}
+//
+//	// Make a new bucket called mymusic.
+//	bucketName := "etastatic"
+//	location := "/"
+//
+//	err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location})
+//	if err != nil {
+//		// Check to see if we already own this bucket (which happens if you run this twice)
+//		exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
+//		if errBucketExists == nil && exists {
+//			log.Printf("We already own %s\n", bucketName)
+//		} else {
+//			log.Fatalln(err)
+//		}
+//	} else {
+//		log.Printf("Successfully created %s\n", bucketName)
+//	}
+//	//buckets, err := minioClient.ListBuckets(ctx)
+//	//for _, bucket := range buckets {
+//	//	fmt.Println(bucket)
+//	//}
+//	// Upload the zip file
+//	objectName := "1111.xlsx"
+//	filePath := "/Users/xi/Desktop/1111.xlsx"
+//	contentType := "application/xlsx"
+//
+//	// Upload the zip file with FPutObject
+//	info, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})
+//	if err != nil {
+//		log.Fatalln(err)
+//	}
+//
+//	log.Printf("Successfully uploaded %s of size %d\n", objectName, info.Size)
+//}
 
 // UploadImgToMinIo 图片上传
-func UploadImgToMinIo(fileName, filePath string) (string, error) {
-	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
-		return "0", errors.New("MinIo信息未配置")
-	}
-
-	ctx := context.Background()
-	endpoint := utils.MinIoEndpoint
-	accessKeyID := utils.MinIoAccessKeyId
-	secretAccessKey := utils.MinIoAccessKeySecret
-	useSSL := false
-	if utils.MinIoUseSSL == "true" {
-		useSSL = true
-	}
-	minioClient, err := minio.New(endpoint, &minio.Options{
-		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
-		Secure: useSSL,
-	})
-	if err != nil {
-		log.Fatalln(err)
-		return "1", err
-	}
-	bucketName := utils.MinIoBucketname
-	// Check to see if we already own this bucket (which happens if you run this twice)
-	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
-	if errBucketExists == nil && exists {
-		log.Printf("We already own %s\n", bucketName)
-	} else {
-		log.Fatalln(err)
-		return "2", err
-	}
-	path := utils.MinIoUploadDir + time.Now().Format("200601/20060102/")
-	path += fileName
-	// Upload the zip file with FPutObject
-	//contentType := "application/xlsx"
-	_, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
-	if err != nil {
-		log.Fatalln(err)
-		return "3", err
-	}
-
-	path = utils.MinIoImghost + path
-	return path, err
-}
+//func UploadImgToMinIo(fileName, filePath string) (string, error) {
+//	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
+//		return "0", errors.New("MinIo信息未配置")
+//	}
+//
+//	ctx := context.Background()
+//	endpoint := utils.MinIoEndpoint
+//	accessKeyID := utils.MinIoAccessKeyId
+//	secretAccessKey := utils.MinIoAccessKeySecret
+//	useSSL := false
+//	if utils.MinIoUseSSL == "true" {
+//		useSSL = true
+//	}
+//	minioClient, err := minio.New(endpoint, &minio.Options{
+//		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
+//		Secure: useSSL,
+//	})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return "1", err
+//	}
+//	bucketName := utils.MinIoBucketname
+//	// Check to see if we already own this bucket (which happens if you run this twice)
+//	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
+//	if errBucketExists == nil && exists {
+//		log.Printf("We already own %s\n", bucketName)
+//	} else {
+//		log.Fatalln(err)
+//		return "2", err
+//	}
+//	path := utils.MinIoUploadDir + time.Now().Format("200601/20060102/")
+//	path += fileName
+//	// Upload the zip file with FPutObject
+//	//contentType := "application/xlsx"
+//	_, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return "3", err
+//	}
+//
+//	path = utils.MinIoImghost + path
+//	return path, err
+//}
 
 // UploadAudioToMinIo 音频上传
-func UploadAudioToMinIo(fileName, filePath string) (string, error) {
-	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
-		return "0", errors.New("MinIo信息未配置")
-	}
-
-	ctx := context.Background()
-	endpoint := utils.MinIoEndpoint
-	accessKeyID := utils.MinIoAccessKeyId
-	secretAccessKey := utils.MinIoAccessKeySecret
-	useSSL := false
-	if utils.MinIoUseSSL == "true" {
-		useSSL = true
-	}
-	minioClient, err := minio.New(endpoint, &minio.Options{
-		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
-		Secure: useSSL,
-	})
-	if err != nil {
-		log.Fatalln(err)
-		return "1", err
-	}
-	bucketName := utils.MinIoBucketname
-	// Check to see if we already own this bucket (which happens if you run this twice)
-	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
-	if errBucketExists == nil && exists {
-		log.Printf("We already own %s\n", bucketName)
-	} else {
-		log.Fatalln(err)
-		return "2", err
-	}
-
-	path := utils.MinIoUpload_Audio_Dir + time.Now().Format("200601/20060102/")
-	path += fileName
-
-	// Upload the zip file with FPutObject
-	//contentType := "application/xlsx"
-	_, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
-	if err != nil {
-		log.Fatalln(err)
-		return "3", err
-	}
-
-	path = utils.MinIoImghost + path
-	return path, err
-}
+//func UploadAudioToMinIo(fileName, filePath string) (string, error) {
+//	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
+//		return "0", errors.New("MinIo信息未配置")
+//	}
+//
+//	ctx := context.Background()
+//	endpoint := utils.MinIoEndpoint
+//	accessKeyID := utils.MinIoAccessKeyId
+//	secretAccessKey := utils.MinIoAccessKeySecret
+//	useSSL := false
+//	if utils.MinIoUseSSL == "true" {
+//		useSSL = true
+//	}
+//	minioClient, err := minio.New(endpoint, &minio.Options{
+//		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
+//		Secure: useSSL,
+//	})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return "1", err
+//	}
+//	bucketName := utils.MinIoBucketname
+//	// Check to see if we already own this bucket (which happens if you run this twice)
+//	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
+//	if errBucketExists == nil && exists {
+//		log.Printf("We already own %s\n", bucketName)
+//	} else {
+//		log.Fatalln(err)
+//		return "2", err
+//	}
+//
+//	path := utils.MinIoUpload_Audio_Dir + time.Now().Format("200601/20060102/")
+//	path += fileName
+//
+//	// Upload the zip file with FPutObject
+//	//contentType := "application/xlsx"
+//	_, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return "3", err
+//	}
+//
+//	path = utils.MinIoImghost + path
+//	return path, err
+//}
 
 // UploadVideoToMinIo 视频上传
-func UploadVideoToMinIo(filename, filePath, savePath string) error {
-	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
-		return errors.New("MinIo信息未配置")
-	}
-	defer func() {
-		os.Remove(filePath)
-	}()
-
-	ctx := context.Background()
-	endpoint := utils.MinIoEndpoint
-	accessKeyID := utils.MinIoAccessKeyId
-	secretAccessKey := utils.MinIoAccessKeySecret
-	useSSL := false
-	if utils.MinIoUseSSL == "true" {
-		useSSL = true
-	}
-	minioClient, err := minio.New(endpoint, &minio.Options{
-		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
-		Secure: useSSL,
-	})
-	if err != nil {
-		log.Fatalln(err)
-		return err
-	}
-	bucketName := utils.MinIoBucketname
-	// Check to see if we already own this bucket (which happens if you run this twice)
-	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
-	if errBucketExists == nil && exists {
-		log.Printf("We already own %s\n", bucketName)
-	} else {
-		log.Fatalln(err)
-		return err
-	}
-
-	//path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
-	//path += filename
-	_, err = minioClient.FPutObject(ctx, bucketName, savePath, filePath, minio.PutObjectOptions{})
-	if err != nil {
-		log.Fatalln(err)
-		return err
-	}
-	//path = utils.Imghost + path
-	//return path,err
-	return err
-}
+//func UploadVideoToMinIo(filename, filePath, savePath string) error {
+//	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
+//		return errors.New("MinIo信息未配置")
+//	}
+//	defer func() {
+//		os.Remove(filePath)
+//	}()
+//
+//	ctx := context.Background()
+//	endpoint := utils.MinIoEndpoint
+//	accessKeyID := utils.MinIoAccessKeyId
+//	secretAccessKey := utils.MinIoAccessKeySecret
+//	useSSL := false
+//	if utils.MinIoUseSSL == "true" {
+//		useSSL = true
+//	}
+//	minioClient, err := minio.New(endpoint, &minio.Options{
+//		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
+//		Secure: useSSL,
+//	})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return err
+//	}
+//	bucketName := utils.MinIoBucketname
+//	// Check to see if we already own this bucket (which happens if you run this twice)
+//	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
+//	if errBucketExists == nil && exists {
+//		log.Printf("We already own %s\n", bucketName)
+//	} else {
+//		log.Fatalln(err)
+//		return err
+//	}
+//
+//	//path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
+//	//path += filename
+//	_, err = minioClient.FPutObject(ctx, bucketName, savePath, filePath, minio.PutObjectOptions{})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return err
+//	}
+//	//path = utils.Imghost + path
+//	//return path,err
+//	return err
+//}
 
 // UploadFileToMinIo 上传文件
-func UploadFileToMinIo(filename, filePath, savePath string) error {
-	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
-		return errors.New("MinIo信息未配置")
-	}
-	defer func() {
-		os.Remove(filePath)
-	}()
-	ctx := context.Background()
-	endpoint := utils.MinIoEndpoint
-	accessKeyID := utils.MinIoAccessKeyId
-	secretAccessKey := utils.MinIoAccessKeySecret
-	useSSL := false
-	if utils.MinIoUseSSL == "true" {
-		useSSL = true
-	}
-	minioClient, err := minio.New(endpoint, &minio.Options{
-		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
-		Secure: useSSL,
-	})
-	if err != nil {
-		log.Fatalln(err)
-		return err
-	}
-	bucketName := utils.MinIoBucketname
-	// Check to see if we already own this bucket (which happens if you run this twice)
-	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
-	if errBucketExists == nil && exists {
-		log.Printf("We already own %s\n", bucketName)
-	} else {
-		log.Fatalln(err)
-		return err
-	}
-	//path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
-	//path += filename
-	_, err = minioClient.FPutObject(ctx, bucketName, savePath, filePath, minio.PutObjectOptions{})
-	if err != nil {
-		log.Fatalln(err)
-		return err
-	}
-	//path = utils.Imghost + path
-	//return path,err
-	return err
-}
+//func UploadFileToMinIo(filename, filePath, savePath string) error {
+//	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
+//		return errors.New("MinIo信息未配置")
+//	}
+//	defer func() {
+//		os.Remove(filePath)
+//	}()
+//	ctx := context.Background()
+//	endpoint := utils.MinIoEndpoint
+//	accessKeyID := utils.MinIoAccessKeyId
+//	secretAccessKey := utils.MinIoAccessKeySecret
+//	useSSL := false
+//	if utils.MinIoUseSSL == "true" {
+//		useSSL = true
+//	}
+//	minioClient, err := minio.New(endpoint, &minio.Options{
+//		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
+//		Secure: useSSL,
+//	})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return err
+//	}
+//	bucketName := utils.MinIoBucketname
+//	// Check to see if we already own this bucket (which happens if you run this twice)
+//	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
+//	if errBucketExists == nil && exists {
+//		log.Printf("We already own %s\n", bucketName)
+//	} else {
+//		log.Fatalln(err)
+//		return err
+//	}
+//	//path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
+//	//path += filename
+//	_, err = minioClient.FPutObject(ctx, bucketName, savePath, filePath, minio.PutObjectOptions{})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return err
+//	}
+//	//path = utils.Imghost + path
+//	//return path,err
+//	return err
+//}
 
 // UploadMinIoToDir 上传至hzchart
-func UploadMinIoToDir(filename, filePath, uploadDir, fileDir string) (string, error) {
+//func UploadMinIoToDir(filename, filePath, uploadDir, fileDir string) (string, error) {
+//	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
+//		return "0", errors.New("MinIo信息未配置")
+//	}
+//	ctx := context.Background()
+//	endpoint := utils.MinIoEndpoint
+//	accessKeyID := utils.MinIoAccessKeyId
+//	secretAccessKey := utils.MinIoAccessKeySecret
+//	useSSL := false
+//	if utils.MinIoUseSSL == "true" {
+//		useSSL = true
+//	}
+//	minioClient, err := minio.New(endpoint, &minio.Options{
+//		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
+//		Secure: useSSL,
+//	})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return "1", err
+//	}
+//	bucketName := utils.MinIoBucketname
+//	// Check to see if we already own this bucket (which happens if you run this twice)
+//	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
+//	if errBucketExists == nil && exists {
+//		log.Printf("We already own %s\n", bucketName)
+//	} else {
+//		log.Fatalln(err)
+//		return "2", err
+//	}
+//	if uploadDir == "" {
+//		uploadDir = utils.MinIoUploadDir
+//	}
+//	if fileDir == "" {
+//		fileDir = time.Now().Format("200601/20060102/")
+//	}
+//	path := uploadDir + fileDir
+//	path += filename
+//	_, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
+//	if err != nil {
+//		log.Fatalln(err)
+//		return "3", err
+//	}
+//	path = utils.MinIoImghost + path
+//	return path, err
+//}
+
+type MinioOss struct{}
+
+// UploadFile 上传文件
+func (m *MinioOss) UploadFile(fileName, filePath, savePath string) (string, error) {
 	if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
 		return "0", errors.New("MinIo信息未配置")
 	}
+
 	ctx := context.Background()
 	endpoint := utils.MinIoEndpoint
 	accessKeyID := utils.MinIoAccessKeyId
@@ -323,7 +372,6 @@ func UploadMinIoToDir(filename, filePath, uploadDir, fileDir string) (string, er
 		return "1", err
 	}
 	bucketName := utils.MinIoBucketname
-	// Check to see if we already own this bucket (which happens if you run this twice)
 	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
 	if errBucketExists == nil && exists {
 		log.Printf("We already own %s\n", bucketName)
@@ -331,19 +379,28 @@ func UploadMinIoToDir(filename, filePath, uploadDir, fileDir string) (string, er
 		log.Fatalln(err)
 		return "2", err
 	}
-	if uploadDir == "" {
-		uploadDir = utils.MinIoUploadDir
-	}
-	if fileDir == "" {
-		fileDir = time.Now().Format("200601/20060102/")
+
+	path := savePath
+	if savePath == "" {
+		path = utils.MinIoUploadDir + time.Now().Format("200601/20060102/") + fileName
 	}
-	path := uploadDir + fileDir
-	path += filename
 	_, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
 	if err != nil {
 		log.Fatalln(err)
 		return "3", err
 	}
-	path = utils.MinIoImghost + path
-	return path, err
+	resourceUrl := utils.MinIoImghost + path
+	return resourceUrl, err
+}
+
+func (m *MinioOss) GetUploadToken() (token OssToken, err error) {
+	token.AccessKeyId = utils.MinIoAccessKeyId
+	token.SecretKeyId = utils.MinIoAccessKeySecret
+	token.Endpoint = utils.MinIoEndpoint
+	token.ImgHost = utils.MinIoImghost
+	token.Bucketname = utils.MinIoBucketname
+	token.UseSSL = utils.MinIoUseSSL
+	token.RegionId = utils.MinIoRegion
+	token.Port = utils.MinIoPort
+	return
 }

+ 167 - 122
services/oss.go

@@ -4,8 +4,8 @@ import (
 	"encoding/json"
 	"errors"
 	"eta/eta_mobile/services/alarm_msg"
+	"fmt"
 	"github.com/aliyun/aliyun-oss-go-sdk/oss"
-	"os"
 	"time"
 
 	"eta/eta_mobile/utils"
@@ -31,124 +31,124 @@ func init() {
 */
 
 // 图片上传到阿里云
-func UploadAliyun(filename, filepath string) (string, error) {
-	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
-	if err != nil {
-		return "1", err
-	}
-	bucket, err := client.Bucket(utils.Bucketname)
-	if err != nil {
-		return "2", err
-	}
-	path := utils.UploadDir + time.Now().Format("200601/20060102/")
-	path += filename
-	err = bucket.PutObjectFromFile(path, filepath)
-	if err != nil {
-		return "3", err
-	}
-	path = utils.Imghost + path
-	return path, err
-}
+//func UploadAliyun(filename, filepath string) (string, error) {
+//	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
+//	if err != nil {
+//		return "1", err
+//	}
+//	bucket, err := client.Bucket(utils.Bucketname)
+//	if err != nil {
+//		return "2", err
+//	}
+//	path := utils.UploadDir + time.Now().Format("200601/20060102/")
+//	path += filename
+//	err = bucket.PutObjectFromFile(path, filepath)
+//	if err != nil {
+//		return "3", err
+//	}
+//	path = utils.Imghost + path
+//	return path, err
+//}
 
 // UploadAliyunV2 图片上传到阿里云
-func UploadAliyunV2(filename, filepath string) (string, error) {
-	if utils.AccessKeyId == `` {
-		return "0", errors.New("阿里云信息未配置")
-	}
-	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
-	if err != nil {
-		return "1", err
-	}
-	bucket, err := client.Bucket(utils.Bucketname)
-	if err != nil {
-		return "2", err
-	}
-	path := utils.UploadDir + time.Now().Format("200601/20060102/")
-	path += filename
-	err = bucket.PutObjectFromFile(path, filepath)
-	if err != nil {
-		return "3", err
-	}
-	path = utils.Imghost + path
-	return path, err
-}
+//func UploadAliyunV2(filename, filepath string) (string, error) {
+//	if utils.AccessKeyId == `` {
+//		return "0", errors.New("阿里云信息未配置")
+//	}
+//	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
+//	if err != nil {
+//		return "1", err
+//	}
+//	bucket, err := client.Bucket(utils.Bucketname)
+//	if err != nil {
+//		return "2", err
+//	}
+//	path := utils.UploadDir + time.Now().Format("200601/20060102/")
+//	path += filename
+//	err = bucket.PutObjectFromFile(path, filepath)
+//	if err != nil {
+//		return "3", err
+//	}
+//	path = utils.Imghost + path
+//	return path, err
+//}
 
 // UploadAudioAliyun 音频上传到阿里云
-func UploadAudioAliyun(filename, filepath string) (string, error) {
-	if utils.AccessKeyId == `` {
-		return "0", errors.New("阿里云信息未配置")
-	}
-	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
-	if err != nil {
-		return "1", err
-	}
-	bucket, err := client.Bucket(utils.Bucketname)
-	if err != nil {
-		return "2", err
-	}
-	path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
-	path += filename
-	err = bucket.PutObjectFromFile(path, filepath)
-	if err != nil {
-		return "3", err
-	}
-	path = utils.Imghost + path
-	return path, err
-}
+//func UploadAudioAliyun(filename, filepath string) (string, error) {
+//	if utils.AccessKeyId == `` {
+//		return "0", errors.New("阿里云信息未配置")
+//	}
+//	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
+//	if err != nil {
+//		return "1", err
+//	}
+//	bucket, err := client.Bucket(utils.Bucketname)
+//	if err != nil {
+//		return "2", err
+//	}
+//	path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
+//	path += filename
+//	err = bucket.PutObjectFromFile(path, filepath)
+//	if err != nil {
+//		return "3", err
+//	}
+//	path = utils.Imghost + path
+//	return path, err
+//}
 
 // UploadVideoAliyun 视频上传到阿里云
-func UploadVideoAliyun(filename, filepath, savePath string) error {
-	if utils.AccessKeyId == `` {
-		return errors.New("阿里云信息未配置")
-	}
-	defer func() {
-		os.Remove(filepath)
-	}()
-	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
-	if err != nil {
-		return err
-	}
-	bucket, err := client.Bucket(utils.Bucketname)
-	if err != nil {
-		return err
-	}
-	//path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
-	//path += filename
-	err = bucket.PutObjectFromFile(savePath, filepath)
-	if err != nil {
-		return err
-	}
-	//path = utils.Imghost + path
-	//return path,err
-	return err
-}
+//func UploadVideoAliyun(filename, filepath, savePath string) error {
+//	if utils.AccessKeyId == `` {
+//		return errors.New("阿里云信息未配置")
+//	}
+//	defer func() {
+//		os.Remove(filepath)
+//	}()
+//	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
+//	if err != nil {
+//		return err
+//	}
+//	bucket, err := client.Bucket(utils.Bucketname)
+//	if err != nil {
+//		return err
+//	}
+//	//path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
+//	//path += filename
+//	err = bucket.PutObjectFromFile(savePath, filepath)
+//	if err != nil {
+//		return err
+//	}
+//	//path = utils.Imghost + path
+//	//return path,err
+//	return err
+//}
 
 // UploadFileToAliyun 上传文件到阿里云
-func UploadFileToAliyun(filename, filepath, savePath string) error {
-	if utils.AccessKeyId == `` {
-		return errors.New("阿里云信息未配置")
-	}
-	defer func() {
-		os.Remove(filepath)
-	}()
-	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
-	if err != nil {
-		return err
-	}
-	bucket, err := client.Bucket(utils.Bucketname)
-	if err != nil {
-		return err
-	}
-	//path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
-	//path += filename
-	err = bucket.PutObjectFromFile(savePath, filepath)
-	if err != nil {
-		return err
-	}
-	//path = utils.Imghost + path
-	//return path,err
-	return err
-}
+//func UploadFileToAliyun(filename, filepath, savePath string) error {
+//	if utils.AccessKeyId == `` {
+//		return errors.New("阿里云信息未配置")
+//	}
+//	defer func() {
+//		os.Remove(filepath)
+//	}()
+//	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
+//	if err != nil {
+//		return err
+//	}
+//	bucket, err := client.Bucket(utils.Bucketname)
+//	if err != nil {
+//		return err
+//	}
+//	//path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
+//	//path += filename
+//	err = bucket.PutObjectFromFile(savePath, filepath)
+//	if err != nil {
+//		return err
+//	}
+//	//path = utils.Imghost + path
+//	//return path,err
+//	return err
+//}
 
 type STSToken struct {
 	AccessKeyId     string
@@ -261,7 +261,38 @@ func NewSTSToken() (item *STSToken, err error) {
 }
 
 // UploadAliyunToDir 上传至hzchart
-func UploadAliyunToDir(filename, filepath, uploadDir, fileDir string) (string, error) {
+//func UploadAliyunToDir(filename, filepath, uploadDir, fileDir string) (string, error) {
+//	if utils.AccessKeyId == `` {
+//		return "0", errors.New("阿里云信息未配置")
+//	}
+//	client, err := oss.New(utils.Endpoint, utils.AccessKeyId, utils.AccessKeySecret)
+//	if err != nil {
+//		return "1", err
+//	}
+//	bucket, err := client.Bucket(utils.Bucketname)
+//	if err != nil {
+//		return "2", err
+//	}
+//	if uploadDir == "" {
+//		uploadDir = utils.UploadDir
+//	}
+//	if fileDir == "" {
+//		fileDir = time.Now().Format("200601/20060102/")
+//	}
+//	path := uploadDir + fileDir
+//	path += filename
+//	err = bucket.PutObjectFromFile(path, filepath)
+//	if err != nil {
+//		return "3", err
+//	}
+//	path = utils.Imghost + path
+//	return path, err
+//}
+
+type AliOss struct{}
+
+// UploadFile 上传文件
+func (m *AliOss) UploadFile(fileName, filePath, savePath string) (string, error) {
 	if utils.AccessKeyId == `` {
 		return "0", errors.New("阿里云信息未配置")
 	}
@@ -273,18 +304,32 @@ func UploadAliyunToDir(filename, filepath, uploadDir, fileDir string) (string, e
 	if err != nil {
 		return "2", err
 	}
-	if uploadDir == "" {
-		uploadDir = utils.UploadDir
-	}
-	if fileDir == "" {
-		fileDir = time.Now().Format("200601/20060102/")
+
+	path := savePath
+	if savePath == "" {
+		path = utils.UploadDir + time.Now().Format("200601/20060102/") + fileName
 	}
-	path := uploadDir + fileDir
-	path += filename
-	err = bucket.PutObjectFromFile(path, filepath)
+	err = bucket.PutObjectFromFile(path, filePath)
 	if err != nil {
 		return "3", err
 	}
-	path = utils.Imghost + path
-	return path, err
+	resourceUrl := utils.Imghost + path
+	return resourceUrl, err
+}
+
+func (m *AliOss) GetUploadToken() (token OssToken, err error) {
+	stsToken, e := GetOssSTSToken()
+	if e != nil {
+		err = fmt.Errorf("GetOssSTSToken err: %s", e.Error())
+		return
+	}
+	token.AccessKeyId = stsToken.AccessKeyId
+	token.AccessKeySecret = stsToken.AccessKeySecret
+	token.SecurityToken = stsToken.SecurityToken
+	token.ExpiredTime = stsToken.ExpiredTime
+	token.RegionId = stsToken.RegionId
+	token.Bucketname = stsToken.Bucketname
+	token.Endpoint = stsToken.Endpoint
+	token.Imghost = stsToken.Imghost
+	return
 }

+ 22 - 11
services/report.go

@@ -517,16 +517,27 @@ func PcCreateAndUploadSunCode(scene, page string) (imgUrl string, err error) {
 	fileDir := "yb/suncode/"
 
 	//上传到阿里云 和 minio
-	if utils.ObjectStorageClient == "minio" {
-		imgUrl, err = UploadMinIoToDir(fileName, fpath, "", fileDir)
-		if err != nil {
-			return
-		}
-	} else {
-		imgUrl, err = UploadAliyunToDir(fileName, fpath, "", fileDir)
-		if err != nil {
-			return
-		}
+	//if utils.ObjectStorageClient == "minio" {
+	//	imgUrl, err = UploadMinIoToDir(fileName, fpath, "", fileDir)
+	//	if err != nil {
+	//		return
+	//	}
+	//} else {
+	//	imgUrl, err = UploadAliyunToDir(fileName, fpath, "", fileDir)
+	//	if err != nil {
+	//		return
+	//	}
+	//}
+	savePath := fileDir + time.Now().Format("200601/20060102/") + fileName
+	ossClient := NewOssClient()
+	if ossClient == nil {
+		err = fmt.Errorf("初始化OSS服务失败")
+		return
+	}
+	imgUrl, err = ossClient.UploadFile(fileName, fpath, savePath)
+	if err != nil {
+		err = fmt.Errorf("文件上传失败, Err: %s", err.Error())
+		return
 	}
 
 	if err != nil {
@@ -538,7 +549,7 @@ func PcCreateAndUploadSunCode(scene, page string) (imgUrl string, err error) {
 			Scene:      scene,
 			SceneMd5:   sceneMD5,
 			CodePage:   page,
-			SuncodeURL: imgUrl,
+			SuncodeUrl: imgUrl,
 			CreateTime: time.Now(),
 		}
 		err = models.AddYbPcSunCode(newSuncode)

+ 44 - 25
services/video.go

@@ -100,18 +100,28 @@ func CreateVideo(report *models.ReportDetail) (err error) {
 
 	uploadUrl := ``
 	//上传到阿里云 和 minio
-	if utils.ObjectStorageClient == "minio" {
-		uploadUrl, err = UploadAudioToMinIo(saveName, savePath)
-		if err != nil {
-			err = errors.New("UploadAudioAliyun Err:" + err.Error())
-			return
-		}
-	} else {
-		uploadUrl, err = UploadAudioAliyun(saveName, savePath)
-		if err != nil {
-			err = errors.New("UploadAudioAliyun Err:" + err.Error())
-			return
-		}
+	//if utils.ObjectStorageClient == "minio" {
+	//	uploadUrl, err = UploadAudioToMinIo(saveName, savePath)
+	//	if err != nil {
+	//		err = errors.New("UploadAudioAliyun Err:" + err.Error())
+	//		return
+	//	}
+	//} else {
+	//	uploadUrl, err = UploadAudioAliyun(saveName, savePath)
+	//	if err != nil {
+	//		err = errors.New("UploadAudioAliyun Err:" + err.Error())
+	//		return
+	//	}
+	//}
+	ossClient := NewOssClient()
+	if ossClient == nil {
+		err = fmt.Errorf("初始化OSS服务失败")
+		return
+	}
+	uploadUrl, err = ossClient.UploadFile(saveName, savePath, "")
+	if err != nil {
+		err = fmt.Errorf("文件上传失败, Err: %s", err.Error())
+		return
 	}
 
 	fileBody, err := ioutil.ReadFile(savePath)
@@ -300,20 +310,29 @@ func CreateReportVideo(reportTitle, reportContent, reportTime string) (uploadUrl
 		time.Sleep(5 * time.Second)
 	}
 
-
 	//上传到阿里云 和 minio
-	if utils.ObjectStorageClient == "minio" {
-		uploadUrl, err = UploadAudioToMinIo(saveName, savePath)
-		if err != nil {
-			err = errors.New("UploadAudioAliyun Err:" + err.Error())
-			return
-		}
-	} else {
-		uploadUrl, err = UploadAudioAliyun(saveName, savePath)
-		if err != nil {
-			err = errors.New("UploadAudioAliyun Err:" + err.Error())
-			return
-		}
+	//if utils.ObjectStorageClient == "minio" {
+	//	uploadUrl, err = UploadAudioToMinIo(saveName, savePath)
+	//	if err != nil {
+	//		err = errors.New("UploadAudioAliyun Err:" + err.Error())
+	//		return
+	//	}
+	//} else {
+	//	uploadUrl, err = UploadAudioAliyun(saveName, savePath)
+	//	if err != nil {
+	//		err = errors.New("UploadAudioAliyun Err:" + err.Error())
+	//		return
+	//	}
+	//}
+	ossClient := NewOssClient()
+	if ossClient == nil {
+		err = fmt.Errorf("初始化OSS服务失败")
+		return
+	}
+	uploadUrl, err = ossClient.UploadFile(saveName, savePath, "")
+	if err != nil {
+		err = fmt.Errorf("文件上传失败, Err: %s", err.Error())
+		return
 	}
 
 	fileBody, err := ioutil.ReadFile(savePath)

+ 29 - 0
utils/config.go

@@ -163,6 +163,20 @@ var (
 	ObjectStorageClient string // 目前有oss minio,默认oss
 )
 
+// S3配置
+var (
+	S3Endpoint        string
+	S3BucketName      string
+	S3UploadDir       string
+	S3AccessKeyId     string
+	S3AccessKeySecret string
+	S3Host            string
+	S3Region          string
+	S3ForceStyle      string
+	S3EndpointPort    string
+	S3Protocol        string
+)
+
 func init() {
 	tmpRunMode, err := web.AppConfig.String("run_mode")
 	if err != nil {
@@ -363,6 +377,21 @@ func init() {
 		MinIoPort = config["minio_port"]
 		MinIoRegion = config["minio_region"]
 	}
+
+	// S3-OSS相关
+	{
+		S3Endpoint = config["s3_endpoint"]
+		S3BucketName = config["s3_bucket_name"]
+		S3Host = config["s3_host"]
+		S3AccessKeyId = config["s3_access_key_id"]
+		S3AccessKeySecret = config["s3_access_key_secret"]
+		S3UploadDir = config["s3_upload_dir"]
+		S3Region = config["s3_region"]
+		S3ForceStyle = config["s3_force_style"]
+		S3EndpointPort = config["s3_endpoint_port"]
+		S3Protocol = config["s3_protocol"]
+	}
+
 	// 商家编码
 	BusinessCode = config["business_code"]
 

+ 6 - 0
utils/constants.go

@@ -382,6 +382,12 @@ const (
 	STORAGESOURCE_MINIO = 2 //MinIo
 )
 
+const (
+	STORAGESOURCE_OSS_NAME   = "oss"
+	STORAGESOURCE_MINIO_NAME = "minio"
+	STORAGESOURCE_S3_NAME    = "s3"
+)
+
 // 子数据来源渠道
 const (
 	DATA_SUB_SOURCE_EDB  = iota //经济数据库