package s3 import ( "context" "io" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) type Config struct { BucketName string `json:"bucketName"` Endpoint string `json:"endpoint"` AccessKey string `json:"accessKey"` SecretKey string `json:"SecretKey"` } var ctx = context.Background() var minioClient *minio.Client var minioInit = false var bucketName string func InitMinio(cfg Config) (err error) { bucketName = cfg.BucketName if !minioInit { minioClient, err = minio.New(cfg.Endpoint, &minio.Options{ Creds: credentials.NewStaticV4(cfg.AccessKey, cfg.SecretKey, ""), Secure: true, }) if err == nil { minioInit = true } } return } func CreateBucket(name string) (err error) { return minioClient.MakeBucket(ctx, name, minio.MakeBucketOptions{}) } // wrap Minio error response func ToErrorResponse(e error) minio.ErrorResponse { return minio.ToErrorResponse(e) } func GetMetadata(name string) (info minio.ObjectInfo, err error) { return minioClient.StatObject(ctx, bucketName, name, minio.GetObjectOptions{}) } func Download(name string) (data *minio.Object, err error) { return minioClient.GetObject(ctx, bucketName, name, minio.GetObjectOptions{}) } func Upload(contentType string, name string, data io.Reader, size int64, metadata map[string]string) (err error) { _, err = minioClient.PutObject(ctx, bucketName, name, data, size, minio.PutObjectOptions{ ContentType: contentType, UserMetadata: metadata, }) return }