refactor(backend): update file info retrieval to use models package and improve file slice creation logic

This commit is contained in:
keven1024
2025-04-28 20:17:53 +08:00
parent e32388f70a
commit ea998b7d34
3 changed files with 25 additions and 30 deletions

View File

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

View File

@@ -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不存在该文件信息")
}

View File

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