add struct upload id

This commit is contained in:
celogeek 2022-05-07 20:40:14 +02:00
parent 8e6d22ee1d
commit a07f826510
Signed by: celogeek
GPG Key ID: E6B7BDCFC446233A

View File

@ -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)
}