GoAdmin文件上传-增加一个Minio上传引擎

增加Minio上传引擎

Minio是一种高性能对象存储。它与Amazon S3云存储服务兼容。

GoAdmin默认提供一个本地文件上传引擎,支持将文件上传到服务器。使用需要在全局配置中设置上传的目录,以及上传文件访问的前缀。

参考:文件上传

分为以下几步:

  1. 定义Minio结构

// MinioUploader minio上传
type MinioUploader struct {
	Bucket    string `json:"bucket"`     // 桶
	Region    string `json:"region"`     // 区域
	SecretID  string `json:"secret_id"`  // ID
	SecretKey string `json:"secret_key"` // 密钥
	UseSSL    bool   `json:"usessl"`     // 是否使用ssl

	Prefix string `json:"prefix"` // 前缀,例如文件夹,格式为biz/
	Path   string `json:"path"`   // 对应minio endpoint
}

  1. 实现Uploader接口

func (u *MinioUploader) Upload(form *multipart.Form) error {
	file.Upload(func(fileObj *multipart.FileHeader, filename string) (string, error) {
		// 实现上传逻辑,返回文件路径与错误信息
		minioClient, err := minio.New(u.Path, &minio.Options{
			Creds:  credentials.NewStaticV4(u.SecretID, u.SecretKey, ""),
			Secure: u.UseSSL,
		})
		if err != nil {
			// 如果minioClient创建失败,返回
			return "", err
		}
		// minio存储中的对象名称
		objectName := filename
		if u.Prefix != "" {
			objectName = u.Prefix + filename
		}
		// 获取上传的文件句柄
		f, err := fileObj.Open()
		if err != nil {
			// 打开上传文件句柄失败,返回
			return "", err
		}
		// 调用Minio Sdk的对象上传
		info, err := minioClient.PutObject(context.Background(), u.Bucket, objectName, f, fileObj.Size, minio.PutObjectOptions{})
		if err != nil {
			// 对象上传失败,返回
			return "", err
		}
		return info.Key, nil
	}, form)
	return nil
}

  1. 在main.go中进行调用
// 在engine中添加配置
	file.AddUploader("minio", func() file.Uploader {
		return &tools.MinioUploader{
			Bucket:    config.GetFileUploadEngine().Config["bucket"].(string),
			Region:    config.GetFileUploadEngine().Config["region"].(string),
			SecretID:  config.GetFileUploadEngine().Config["secret_id"].(string),
			SecretKey: config.GetFileUploadEngine().Config["secret_key"].(string),
			UseSSL:    config.GetFileUploadEngine().Config["usessl"].(bool),
			Prefix:    config.GetFileUploadEngine().Config["prefix"].(string),
			Path:      config.GetFileUploadEngine().Config["path"].(string),
		}
	})

	_ = r.Run(":9033")
  1. 在Web配置中心(网站设置)添加文件上传引擎参数配置。

    这样就实现一个Minio上传文件引擎了!:beer::beer: