package handle import ( "allapp-go/internal/errors" "allapp-go/internal/httpx" "allapp-go/internal/types" "allapp-go/pkg/logger" "allapp-go/pkg/s3store" "fmt" "path/filepath" "time" "github.com/gofiber/fiber/v3" "github.com/google/uuid" "go.uber.org/zap" ) 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(), file, key, fileHeader.Size, contentType, ) _ = file.Close() if err != nil { return errors.WithStack(err) } result = append(result, key) } return httpx.OK(c, result) } func S3DeleteFile(c fiber.Ctx) error { var req types.S3DeleteReq if err := httpx.BindAndValidate(c, &req); err != nil { return errors.WithStack(err) } log := logger.FromCtx(c.Context()) if err := s3store.DeleteBatch(c.Context(), req.Keys); err != nil { log.Warn("S3 批量删除失败", zap.Int("count", len(req.Keys)), zap.Error(err), ) // ❗仍然返回成功(符合你的要求) } return httpx.OK(c, nil) }