github.com/kubeshop/testkube@v1.17.23/internal/app/api/v1/uploads.go (about) 1 package v1 2 3 import ( 4 "fmt" 5 6 "github.com/gofiber/fiber/v2" 7 ) 8 9 // UploadFiles uploads files into the object store and uses them during execution 10 func (s TestkubeAPI) UploadFiles() fiber.Handler { 11 return func(c *fiber.Ctx) error { 12 errPrefix := "failed to upload file" 13 14 parentName := c.FormValue("parentName") 15 if parentName == "" { 16 return s.Error(c, fiber.StatusBadRequest, fmt.Errorf("%s: wrong input: parentName cannot be empty", errPrefix)) 17 } 18 parentType := c.FormValue("parentType") 19 if parentType == "" { 20 return s.Error(c, fiber.StatusBadRequest, fmt.Errorf("%s: wrong input: parentType cannot be empty", errPrefix)) 21 } 22 filePath := c.FormValue("filePath") 23 if filePath == "" { 24 return s.Error(c, fiber.StatusBadRequest, fmt.Errorf("%s: wrong input: filePath cannot be empty", errPrefix)) 25 } 26 27 bucketName := s.ArtifactsStorage.GetValidBucketName(parentType, parentName) 28 file, err := c.FormFile("attachment") 29 if err != nil { 30 return s.Error(c, fiber.StatusBadRequest, fmt.Errorf("%s: unable to upload file: %w", errPrefix, err)) 31 } 32 f, err := file.Open() 33 if err != nil { 34 return s.Error(c, fiber.StatusBadRequest, fmt.Errorf("%s: cannot read file: %w", errPrefix, err)) 35 } 36 defer f.Close() 37 38 err = s.ArtifactsStorage.UploadFile(c.Context(), bucketName, filePath, f, file.Size) 39 if err != nil { 40 return s.Error(c, fiber.StatusInternalServerError, fmt.Errorf("%s: could not save uploaded file: %w", errPrefix, err)) 41 } 42 43 return c.JSON(fiber.StatusOK) 44 } 45 }