mirror of
https://github.com/keven1024/015.git
synced 2026-05-26 07:08:02 +00:00
refactor(backend): update file info retrieval to use models package and improve file slice creation logic
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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不存在该文件信息")
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user