heruvym/dal/minio/minio.go
2024-11-26 02:11:24 +03:00

101 lines
2.3 KiB
Go

package minio
import (
"context"
"fmt"
"io"
"net/http"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"gitea.pena/PenaSide/hlog"
)
type BlobStore struct {
log hlog.Logger
store *minio.Client
}
const (
bucket = "3c580be9-cf31f296-d055-49cf-b39e-30c7959dc17b"
folder = "angelsight"
)
func New(ctx context.Context, logger hlog.Logger,
endpoint, keyID, accessKey, token, region string,
useSSL bool) (*BlobStore, error) {
conn, err := minio.New(endpoint,
&minio.Options{
Creds: credentials.NewStaticV4(keyID, accessKey, token),
Secure: false,
},
)
if err != nil {
return nil, err
}
fmt.Println("monio", keyID, accessKey, token, region)
return &BlobStore{
log: logger.Module("minio"),
store: conn,
}, nil
}
func (bs *BlobStore) PutFile(
ctx context.Context,
filename string,
reader io.Reader,
size int64) error {
info, err := bs.store.PutObject(ctx, bucket, folder+"/"+filename, reader, size, minio.PutObjectOptions{
//UserMetadata: nil,
//UserTags: nil,
//Progress: nil,
//ContentType: "",
//ContentEncoding: "",
//ContentDisposition: "",
//ContentLanguage: "",
//CacheControl: "",
//Mode: "",
//RetainUntilDate: time.Time{},
//ServerSideEncryption: nil,
//NumThreads: 0,
//StorageClass: "",
//WebsiteRedirectLocation: "",
//PartSize: 0,
//LegalHold: "",
//SendContentMd5: false,
//DisableMultipart: false,
//Internal: minio.AdvancedPutOptions{},
})
if err != nil {
fmt.Println(err)
return err
}
fmt.Println("info", info)
return nil
}
func (bs *BlobStore) DeleteFile(ctx context.Context, id string) error {
if err := bs.store.RemoveObject(ctx, bucket, folder+"/"+id, minio.RemoveObjectOptions{
//GovernanceBypass: false,
//VersionID: "",
//Internal: AdvancedRemoveOptions
}); err != nil {
return err
}
return nil
}
func (bs *BlobStore) FileExists(ctx context.Context, filename string) (bool, error) {
_, err := bs.store.StatObject(ctx, bucket, folder+"/"+filename, minio.StatObjectOptions{})
if err != nil {
if minio.ToErrorResponse(err).StatusCode == http.StatusNotFound {
return false, nil
}
return false, err
}
return true, nil
}