From ea998b7d34c0df3b210cb5a584e899ff4cb9128e Mon Sep 17 00:00:00 2001 From: keven1024 <99848979+keven1024@users.noreply.github.com> Date: Mon, 28 Apr 2025 20:17:53 +0800 Subject: [PATCH] refactor(backend): update file info retrieval to use models package and improve file slice creation logic --- backend/internal/controllers/file.go | 6 +++--- backend/internal/models/file.go | 20 +++++++++++++++++++ backend/internal/service/file.go | 29 ++-------------------------- 3 files changed, 25 insertions(+), 30 deletions(-) diff --git a/backend/internal/controllers/file.go b/backend/internal/controllers/file.go index 63ac4bf..bd5552e 100644 --- a/backend/internal/controllers/file.go +++ b/backend/internal/controllers/file.go @@ -27,7 +27,7 @@ func CreateUploadTask(c echo.Context) error { } rdb, ctx := utils.GetRedisClient() fileId := service.GetFileId(r.FileHash, r.FileSize) - fileInfo, _ := service.GetRedisFileInfo(fileId) + fileInfo, _ := models.GetRedisFileInfo(fileId) if fileInfo != (models.RedisFileInfo{}) { return utils.HTTPSuccessHandler(c, map[string]any{ @@ -78,7 +78,7 @@ func UploadFileSlice(c echo.Context) error { if r.FileId == "" || r.FileIndex == 0 || r.FileSlice == nil { return utils.HTTPErrorHandler(c, errors.New("上传文件信息不完整")) } - _, err := service.GetRedisFileInfo(r.FileId) + _, err := models.GetRedisFileInfo(r.FileId) if err != nil { return utils.HTTPErrorHandler(c, err) @@ -127,7 +127,7 @@ func FinishUploadTask(c echo.Context) error { return utils.HTTPErrorHandler(c, errors.New("文件ID不能为空")) } - fileInfo, err := service.GetRedisFileInfo(r.FileId) + fileInfo, err := models.GetRedisFileInfo(r.FileId) if err != nil { return utils.HTTPErrorHandler(c, err) } diff --git a/backend/internal/models/file.go b/backend/internal/models/file.go index 7c7aa50..b917437 100644 --- a/backend/internal/models/file.go +++ b/backend/internal/models/file.go @@ -1,5 +1,11 @@ package models +import ( + "backend/internal/utils" + "encoding/json" + "errors" +) + type FileInfo struct { FileSize int64 `json:"size"` MimeType string `json:"mime_type"` @@ -26,3 +32,17 @@ type RedisShareInfo struct { FileId string `json:"fileId"` CreatedAt int64 `json:"created_at"` } + +func GetRedisFileInfo(fileId string) (RedisFileInfo, error) { + rdb, ctx := utils.GetRedisClient() + fileInfoUnmarshalData, _ := rdb.HGet(ctx, "015:fileInfoMap", fileId).Result() + + if fileInfoUnmarshalData != "" { + var fileInfoData RedisFileInfo + if err := json.Unmarshal([]byte(fileInfoUnmarshalData), &fileInfoData); err != nil { + return RedisFileInfo{}, err + } + return fileInfoData, nil + } + return RedisFileInfo{}, errors.New("db不存在该文件信息") +} diff --git a/backend/internal/service/file.go b/backend/internal/service/file.go index c101051..8ce1aed 100644 --- a/backend/internal/service/file.go +++ b/backend/internal/service/file.go @@ -1,13 +1,8 @@ package service import ( - "backend/internal/models" - "backend/internal/utils" - "encoding/json" - "errors" "fmt" "io" - "mime/multipart" "os" "path/filepath" "strconv" @@ -29,31 +24,11 @@ func GetUploadDirPath() (string, error) { return finalPath, nil } -func GetRedisFileInfo(fileId string) (models.RedisFileInfo, error) { - rdb, ctx := utils.GetRedisClient() - fileInfoUnmarshalData, _ := rdb.HGet(ctx, "015:fileInfoMap", fileId).Result() - - if fileInfoUnmarshalData != "" { - var fileInfoData models.RedisFileInfo - if err := json.Unmarshal([]byte(fileInfoUnmarshalData), &fileInfoData); err != nil { - return models.RedisFileInfo{}, err - } - return fileInfoData, nil - } - return models.RedisFileInfo{}, errors.New("db不存在该文件信息") -} - func GetFileId(fileHash string, fileSize int64) string { return fmt.Sprintf("%s_%d", fileHash, fileSize) } -func CreateFileSlice(fileSlice *multipart.FileHeader, fileId string, fileIndex int64) error { - src, err := fileSlice.Open() - if err != nil { - return err - } - defer src.Close() - +func CreateFileSlice(fileSlice io.Reader, fileId string, fileIndex int64) error { uploadPath, err := GetUploadDirPath() if err != nil { return err @@ -70,7 +45,7 @@ func CreateFileSlice(fileSlice *multipart.FileHeader, fileId string, fileIndex i } defer dst.Close() - if _, err = io.Copy(dst, src); err != nil { + if _, err = io.Copy(dst, fileSlice); err != nil { return err }