package handle import ( "allapp-go/internal/errors" "allapp-go/internal/httpx" "allapp-go/pkg/s3store" "fmt" "path/filepath" "time" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/gofiber/fiber/v3" "github.com/google/uuid" ) func S3ListBuckets(c fiber.Ctx) error { result, err := s3store.S3Client.ListBuckets(c.Context(), &s3.ListBucketsInput{}) if err != nil { return errors.WithStack(err) } buckets := make([]string, 0, len(result.Buckets)) for _, b := range result.Buckets { if b.Name != nil { buckets = append(buckets, *b.Name) } } return httpx.OK(c, buckets) } func S3UploadFile(c fiber.Ctx) error { form, err := c.MultipartForm() if err != nil { return errors.WithStack(err) } files := form.File["files"] if len(files) == 0 { return httpx.OK(c, nil) } now := time.Now() folderPath := fmt.Sprintf("%d/%02d/%02d", now.Year(), now.Month(), now.Day(), ) var result []string for _, fileHeader := range files { file, err := fileHeader.Open() if err != nil { return errors.WithStack(err) } ext := filepath.Ext(fileHeader.Filename) newName := fmt.Sprintf("%s%s", uuid.NewString(), ext) key := fmt.Sprintf("%s/%s", folderPath, newName) contentType := fileHeader.Header.Get("Content-Type") err = s3store.UploadToRustFS( c.Context(), key, file, fileHeader.Size, contentType, ) _ = file.Close() if err != nil { return errors.WithStack(err) } result = append(result, key) } return httpx.OK(c, result) }