Files
go-socket/packages/minio/minio.go
T
2026-04-16 20:38:16 +02:00

77 lines
2.0 KiB
Go

package minio
import (
"context"
"io"
"mime"
"net/url"
"strconv"
"time"
"go-socket/packages/globals"
"github.com/google/uuid"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
var minClient *minio.Client
func GetKey(connectionId uuid.UUID, mimeType string) string {
extensions, err := mime.ExtensionsByType(mimeType)
if err != nil || len(extensions) == 0 {
extensions = []string{".unknown"}
}
return connectionId.String() + "/" + strconv.FormatInt(time.Now().UnixMilli(), 10) + extensions[0]
}
func Init(ctx context.Context) {
var err error
minClient, err = minio.New("localhost:9000", &minio.Options{
Creds: credentials.NewStaticV4("root", "change_to_env", ""),
Secure: false,
}) // TODO change in production
if err != nil {
panic(err)
}
exists, err := minClient.BucketExists(ctx, globals.FileStorageBucketName)
if err != nil {
panic(err)
}
if !exists {
err = minClient.MakeBucket(ctx, globals.FileStorageBucketName, minio.MakeBucketOptions{})
if err != nil {
exists, checkErr := minClient.BucketExists(ctx, globals.FileStorageBucketName)
if checkErr != nil || !exists {
panic(err)
}
}
}
}
func Upload(ctx context.Context, key string, body io.Reader, size int64, contentType string, metadata map[string]string) error {
opt := minio.PutObjectOptions{
ContentType: contentType,
PartSize: globals.FileProcessingPartSize,
NumThreads: globals.FileProcessingThreads,
UserMetadata: metadata,
}
opt.SetMatchETagExcept("*")
_, err := minClient.PutObject(ctx, globals.FileStorageBucketName, key, body, size, opt)
return err
}
func GetDownloadUrl(ctx context.Context, key string) (*url.URL, error) {
u, err := minClient.PresignedGetObject(ctx, globals.FileStorageBucketName, key, globals.FileDownloadLinkTtl, nil)
return u, err
}
func DoesExist(ctx context.Context, key string) bool {
_, err := minClient.StatObject(ctx, globals.FileStorageBucketName, key, minio.StatObjectOptions{})
return err == nil
}