From a07f826510e8a025be51065f0d8c7e6676ca93c4 Mon Sep 17 00:00:00 2001 From: celogeek Date: Sat, 7 May 2022 20:40:14 +0200 Subject: [PATCH] add struct upload id --- internal/photos/api/upload.go | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/internal/photos/api/upload.go b/internal/photos/api/upload.go index f074c92..fa8704d 100644 --- a/internal/photos/api/upload.go +++ b/internal/photos/api/upload.go @@ -35,25 +35,32 @@ func (s *Service) UploadCreate(c *gin.Context) { }) } -type UploadPartRequest struct { - UploadId string `form:"upload_id" binding:"required,uuid"` +type UploadUri struct { + Id string `uri:"upload_id" binding:"required,uuid"` +} + +type UploadPartQuery struct { Part uint `form:"part" binding:"required"` PartSha256 string `form:"sha256" binding:"required,sha256"` } func (s *Service) UploadPart(c *gin.Context) { - var uploadPart UploadPartRequest - if c.BindQuery(&uploadPart) != nil { + var ( + upload UploadUri + uploadPart UploadPartQuery + ) + + if c.BindUri(&upload) != nil || c.BindQuery(&uploadPart) != nil { return } - if !s.Storage.Exists(StorageTmp, uploadPart.UploadId) { + if !s.Storage.Exists(StorageTmp, upload.Id) { c.AbortWithError(http.StatusNotFound, ErrUploadNotExists) return } f, err := os.Create( - s.Storage.Join(StorageTmp, uploadPart.UploadId, fmt.Sprint(uploadPart.Part)), + s.Storage.Join(StorageTmp, upload.Id, fmt.Sprint(uploadPart.Part)), ) if err != nil { c.AbortWithError(http.StatusInternalServerError, err) @@ -72,7 +79,7 @@ func (s *Service) UploadPart(c *gin.Context) { } c.JSON(http.StatusCreated, gin.H{ - "upload_id": uploadPart.UploadId, + "upload_id": upload.Id, "part": uploadPart.Part, "size": w, "sha256": hex.EncodeToString(sha.Sum(nil)), @@ -81,9 +88,12 @@ func (s *Service) UploadPart(c *gin.Context) { } func (s *Service) UploadCancel(c *gin.Context) { - upload_id := c.Param("upload_id") + var upload UploadUri + if c.BindUri(&upload) != nil { + return + } - if err := s.Storage.Delete(StorageTmp, upload_id); err != nil { + if err := s.Storage.Delete(StorageTmp, upload.Id); err != nil { c.AbortWithError(http.StatusNotFound, ErrUploadNotExists) return } @@ -114,7 +124,7 @@ func (s *Service) UploadComplete(c *gin.Context) { func (s *Service) UploadInit() { upload := s.Gin.Group("/upload") upload.GET("/create", s.UploadCreate) - upload.POST("/part", s.UploadPart) + upload.POST("/part/:upload_id", s.UploadPart) upload.GET("/cancel/:upload_id", s.UploadCancel) upload.POST("/complete/:upload_id", s.UploadComplete) }