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  }