49 lines
1.0 KiB
Go
49 lines
1.0 KiB
Go
package minioDB
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
_ "image/gif"
|
|
_ "image/jpeg"
|
|
"io"
|
|
|
|
_ "github.com/gen2brain/heic"
|
|
"github.com/minio/minio-go/v7"
|
|
)
|
|
|
|
// UploadFile uploads an image to MinIO
|
|
func (c *client) UploadFile(
|
|
ctx context.Context, bucketName, objectName string,
|
|
reader io.Reader, size int64, opts minio.PutObjectOptions,
|
|
) (string, error) {
|
|
// Ensure bucket exists
|
|
exist, err := c.existBucket(bucketName)
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to check bucket: %v", err)
|
|
}
|
|
if !exist {
|
|
if err := c.createBucket(bucketName); err != nil {
|
|
return "", fmt.Errorf("failed to create bucket: %v", err)
|
|
}
|
|
}
|
|
if bucketName == "" {
|
|
return "", fmt.Errorf("bucket name cannot be empty")
|
|
}
|
|
// Generate secure file name
|
|
name, err := c.generateFileName(objectName)
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to generate file name: %v", err)
|
|
}
|
|
// Upload to MinIO
|
|
_, err = c.minioClient.PutObject(
|
|
ctx, bucketName, name,
|
|
reader, size, opts,
|
|
)
|
|
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to upload file: %v", err)
|
|
}
|
|
|
|
return name, nil
|
|
}
|