Files
soft_usite/pkg/services/oss_service.go
T
2025-04-24 02:07:47 +00:00

94 lines
2.2 KiB
Go
Executable File

package services
import (
"fmt"
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
)
type OSSService struct {
Client *oss.Client
Bucket *oss.Bucket
BucketName string
Endpoint string
}
// Configuración del OSS
type OSSConfig struct {
Endpoint string
AccessKeyID string
AccessKeySecret string
BucketName string
}
// Constructor del servicio OSS
func NewOSSService(cfg OSSConfig) (*OSSService, error) {
client, err := oss.New(cfg.Endpoint, cfg.AccessKeyID, cfg.AccessKeySecret)
if err != nil {
return nil, fmt.Errorf("error creando cliente OSS: %w", err)
}
bucket, err := client.Bucket(cfg.BucketName)
if err != nil {
return nil, fmt.Errorf("error obteniendo bucket: %w", err)
}
return &OSSService{
Client: client,
Bucket: bucket,
BucketName: cfg.BucketName,
Endpoint: cfg.Endpoint,
}, nil
}
// Subir un archivo
func (s *OSSService) UploadFile(objectKey string, filePath string) error {
err := s.Bucket.PutObjectFromFile(objectKey, filePath)
if err != nil {
return fmt.Errorf("error subiendo archivo: %w", err)
}
log.Printf("Archivo '%s' subido como '%s'", filePath, objectKey)
return nil
}
// Listar archivos en el bucket
func (s *OSSService) ListFiles() ([]string, error) {
objects, err := s.Bucket.ListObjects()
if err != nil {
return nil, fmt.Errorf("error listando archivos: %w", err)
}
var keys []string
for _, obj := range objects.Objects {
keys = append(keys, obj.Key)
}
return keys, nil
}
// NewOSSServiceFromDB construye OSSService desde el último registro activo
func NewOSSServiceFromDB() (*OSSService, error) {
cfg, err := models.GetLastActiveOssApi()
if err != nil {
return nil, fmt.Errorf("error obteniendo configuración OSS activa: %w", err)
}
return NewOSSService(OSSConfig{
Endpoint: cfg.Endpoint,
AccessKeyID: cfg.AccessKeyID,
AccessKeySecret: cfg.AccessKeySecret,
BucketName: cfg.BucketName,
})
}
// Eliminar un archivo del bucket
func (s *OSSService) DeleteFile(objectKey string) error {
err := s.Bucket.DeleteObject(objectKey)
if err != nil {
return fmt.Errorf("error eliminando archivo '%s' de OSS: %w", objectKey, err)
}
log.Printf("Archivo eliminado de OSS: %s", objectKey)
return nil
}