waifu_gallery/s3/s3.go

61 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
}