refactor: migrate file utility functions to services package and update references in controllers; remove deprecated utils file

This commit is contained in:
keven1024
2026-02-27 12:18:18 +08:00
parent ed7ac4e657
commit e5b5def6f0
10 changed files with 60 additions and 145 deletions

View File

@@ -11,7 +11,7 @@ import (
)
func GetAbout(c *echo.Context) error {
maxStorageSize, err := utils.GetFileSize(u.GetEnv("upload.maximum"))
maxStorageSize, err := u.GetFileSize(u.GetEnv("upload.maximum"))
if err != nil {
return utils.HTTPErrorHandler(c, err)
}

View File

@@ -37,11 +37,11 @@ func DownloadShare(c *echo.Context) error {
if shareInfo.Type == models.ShareTypeFile {
fileInfo, _ := models.GetRedisFileInfo(shareInfo.Data)
uploadPath, err := utils.GetUploadDirPath()
uploadPath, err := u.GetUploadDirPath()
if err != nil {
return err
}
return c.Attachment(fmt.Sprintf("%s/%s", uploadPath, utils.GetFileId(fileInfo.FileHash, fileInfo.FileSize)), shareInfo.FileName)
return c.Attachment(fmt.Sprintf("%s/%s", uploadPath, u.GetFileId(fileInfo.FileHash, fileInfo.FileSize)), shareInfo.FileName)
}
return utils.HTTPSuccessHandler(c, map[string]any{
"data": shareInfo.Data,

View File

@@ -9,11 +9,12 @@ import (
"mime/multipart"
"os"
"pkg/models"
s "pkg/services"
u "pkg/utils"
"time"
"github.com/hibiken/asynq"
"github.com/labstack/echo/v5"
"github.com/spf13/cast"
)
func CreateUploadTask(c *echo.Context) error {
@@ -26,14 +27,14 @@ func CreateUploadTask(c *echo.Context) error {
if r.FileSize == 0 || r.MimeType == "" || r.FileHash == "" {
return utils.HTTPErrorHandler(c, errors.New("调用接口参数错误"))
}
fileId := utils.GetFileId(r.FileHash, r.FileSize)
fileId := u.GetFileId(r.FileHash, r.FileSize)
fileInfo, err := models.GetRedisFileInfo(fileId)
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
if fileInfo != nil {
uploadPath, err := utils.GetUploadDirPath()
uploadPath, err := u.GetUploadDirPath()
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
@@ -52,7 +53,7 @@ func CreateUploadTask(c *echo.Context) error {
"chunks": sliceList,
})
}
maxStorageSize, err := utils.GetFileSize(u.GetEnv("upload.maximum"))
maxStorageSize, err := u.GetFileSize(u.GetEnv("upload.maximum"))
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
@@ -78,7 +79,7 @@ func CreateUploadTask(c *echo.Context) error {
for r.FileSize/ChunkSize > 1000 {
ChunkSize *= 2
}
uploadTaskExpire := int64(3600)
uploadTaskExpire := cast.ToInt64(u.GetEnvWithDefault("upload.remove_expire", "2")) * 3600
newFileInfo := models.RedisFileInfo{
FileType: models.FileTypeInit,
FileInfo: models.FileInfo{
@@ -95,14 +96,7 @@ func CreateUploadTask(c *echo.Context) error {
return utils.HTTPErrorHandler(c, err)
}
client := u.GetQueueClient()
json, err := json.Marshal(map[string]any{
"file_id": fileId,
})
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
_, err = client.Enqueue(asynq.NewTask("file:remove", json), asynq.ProcessIn(time.Duration(uploadTaskExpire)*time.Second))
err = s.SetFileRemoveTask(fileId, time.Duration(uploadTaskExpire)*time.Second)
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
@@ -161,7 +155,7 @@ func UploadFileSlice(c *echo.Context) error {
}
defer file.Close()
uploadPath, err := utils.GetUploadDirPath()
uploadPath, err := u.GetUploadDirPath()
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
@@ -203,7 +197,7 @@ func FinishUploadTask(c *echo.Context) error {
return utils.HTTPErrorHandler(c, errors.New("上传任务已过期"))
}
uploadPath, err := utils.GetUploadDirPath()
uploadPath, err := u.GetUploadDirPath()
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
@@ -231,7 +225,7 @@ func FinishUploadTask(c *echo.Context) error {
return utils.HTTPErrorHandler(c, err)
}
file_hash, err := utils.GetFileMd5(file)
file_hash, err := u.GetFileMd5(file)
if err != nil {
file.Close()

View File

@@ -1,56 +0,0 @@
package utils
import (
"bufio"
"crypto/md5"
"fmt"
"io"
"os"
"path/filepath"
"pkg/utils"
humanize "github.com/dustin/go-humanize"
)
func GetFileId(fileHash string, fileSize int64) string {
return fmt.Sprintf("%s_%d", fileHash, fileSize)
}
func GetFileMd5(file io.Reader) (string, error) {
const bufferSize = 1024 * 1000 // 1MB
hash := md5.New()
for buf, reader := make([]byte, bufferSize), bufio.NewReader(file); ; {
n, err := reader.Read(buf)
if err != nil {
if err == io.EOF {
break
}
return "", err
}
hash.Write(buf[:n])
}
return fmt.Sprintf("%x", hash.Sum(nil)), nil
}
func GetUploadDirPath() (string, error) {
uploadPath := utils.GetEnv("upload.path")
if uploadPath == "" {
basepath, err := os.Getwd()
if err != nil {
return "", err
}
uploadPath = filepath.Join(basepath, "uploads")
}
if err := os.MkdirAll(uploadPath, 0755); err != nil {
return "", err
}
return uploadPath, nil
}
func GetFileSize(size string) (uint64, error) {
return humanize.ParseBytes(size)
}