package services import ( "context" "errors" "eta/eta_mini_crm/utils" "fmt" "log" "time" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) 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不一致的情况, 前端用minio_endpoint后端用minio_back_endpoint, minio_back_endpoint为空则都取前者 endpoint := utils.MinIoEndpoint if utils.MinIoBackEndpoint != "" { endpoint = utils.MinIoBackEndpoint } 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 exists, errBucketExists := minioClient.BucketExists(ctx, bucketName) if errBucketExists != nil || !exists { err = fmt.Errorf("BucketExists: %v; err: %v", exists, errBucketExists) return "2", err } path := savePath if savePath == "" { path = utils.MinIoUploadDir + time.Now().Format("200601/20060102/") + fileName } _, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{}) if err != nil { log.Fatalln(err) return "3", err } resourceUrl := utils.MinIoPdfhost + 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.MinIoPdfhost token.Bucketname = utils.MinIoBucketname token.UseSSL = utils.MinIoUseSSL token.RegionId = utils.MinIoRegion token.Port = utils.MinIoPort return }