From 30097256b6f36024218a8db49a101c3fd06ffb7e Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 28 Dec 2024 13:38:55 +0800 Subject: [PATCH] :bug: Bug fixes on fragment based uploading --- pkg/internal/server/api/attachments_api.go | 6 ------ pkg/internal/server/api/up_direct_api.go | 1 - pkg/internal/services/analyzer.go | 4 +--- pkg/internal/services/merger.go | 1 + pkg/internal/services/recycler.go | 24 +++++++++++----------- 5 files changed, 14 insertions(+), 22 deletions(-) diff --git a/pkg/internal/server/api/attachments_api.go b/pkg/internal/server/api/attachments_api.go index 9e1b582..5beadba 100644 --- a/pkg/internal/server/api/attachments_api.go +++ b/pkg/internal/server/api/attachments_api.go @@ -23,8 +23,6 @@ func openAttachment(c *fiber.Ctx) error { metadata, err := services.GetAttachmentByRID(id) if err != nil { return fiber.NewError(fiber.StatusNotFound) - } else if !metadata.IsUploaded { - return fiber.NewError(fiber.StatusNotFound, "file is in uploading progress, please wait until all chunk uploaded") } destMap := viper.GetStringMap(fmt.Sprintf("destinations.%d", metadata.Destination)) @@ -91,7 +89,6 @@ func updateAttachmentMeta(c *fiber.Ctx) error { var data struct { Alternative *string `json:"alt"` - Thumbnail *string `json:"thumbnail"` Metadata *map[string]any `json:"metadata"` IsIndexable *bool `json:"is_indexable"` } @@ -108,9 +105,6 @@ func updateAttachmentMeta(c *fiber.Ctx) error { if data.Alternative != nil { attachment.Alternative = *data.Alternative } - if data.Thumbnail != nil { - attachment.Thumbnail = *data.Thumbnail - } if data.Metadata != nil { attachment.Usermeta = *data.Metadata } diff --git a/pkg/internal/server/api/up_direct_api.go b/pkg/internal/server/api/up_direct_api.go index 8a5bb11..feafcd8 100644 --- a/pkg/internal/server/api/up_direct_api.go +++ b/pkg/internal/server/api/up_direct_api.go @@ -48,7 +48,6 @@ func createAttachmentDirectly(c *fiber.Ctx) error { MimeType: c.FormValue("mimetype"), Usermeta: usermeta, IsAnalyzed: false, - IsUploaded: true, Destination: models.AttachmentDstTemporary, Pool: &pool, PoolID: &pool.ID, diff --git a/pkg/internal/services/analyzer.go b/pkg/internal/services/analyzer.go index dda6d70..7358896 100644 --- a/pkg/internal/services/analyzer.go +++ b/pkg/internal/services/analyzer.go @@ -99,9 +99,7 @@ func ScanUnanalyzedFileFromDatabase() { } func AnalyzeAttachment(file models.Attachment) error { - if !file.IsUploaded { - return fmt.Errorf("file isn't finish multipart upload") - } else if file.Destination != models.AttachmentDstTemporary { + if file.Destination != models.AttachmentDstTemporary { return fmt.Errorf("attachment isn't in temporary storage, unable to analyze") } diff --git a/pkg/internal/services/merger.go b/pkg/internal/services/merger.go index 8bb1e93..ec83dc0 100644 --- a/pkg/internal/services/merger.go +++ b/pkg/internal/services/merger.go @@ -65,6 +65,7 @@ func MergeFileChunks(meta models.AttachmentFragment, arrange []string) (models.A PublishAnalyzeTask(attachment) // Clean up: remove chunk files + go DeleteFragment(meta) for _, chunk := range arrange { chunkPath := filepath.Join(dest.Path, fmt.Sprintf("%s.part%s", meta.Uuid, chunk)) if err := os.Remove(chunkPath); err != nil { diff --git a/pkg/internal/services/recycler.go b/pkg/internal/services/recycler.go index cd2ab09..37e3750 100644 --- a/pkg/internal/services/recycler.go +++ b/pkg/internal/services/recycler.go @@ -79,21 +79,21 @@ func RunScheduleDeletionTask() { database.C.Where("cleaned_at IS NOT NULL").Delete(&models.Attachment{}) } -func DeleteFile(meta models.Attachment) error { - if !meta.IsUploaded { - destMap := viper.GetStringMap("destinations.0") - var dest models.LocalDestination - rawDest, _ := jsoniter.Marshal(destMap) - _ = jsoniter.Unmarshal(rawDest, &dest) +func DeleteFragment(meta models.AttachmentFragment) error { + destMap := viper.GetStringMap("destinations.0") + var dest models.LocalDestination + rawDest, _ := jsoniter.Marshal(destMap) + _ = jsoniter.Unmarshal(rawDest, &dest) - for cid := range meta.FileChunks { - path := filepath.Join(dest.Path, fmt.Sprintf("%s.part%s", meta.Uuid, cid)) - _ = os.Remove(path) - } - - return nil + for cid := range meta.FileChunks { + path := filepath.Join(dest.Path, fmt.Sprintf("%s.part%s", meta.Uuid, cid)) + _ = os.Remove(path) } + return nil +} + +func DeleteFile(meta models.Attachment) error { destMap := viper.GetStringMap(fmt.Sprintf("destinations.%d", meta.Destination)) var dest models.BaseDestination