60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
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
|
|
}
|