diff --git a/backend/internal/controllers/file.go b/backend/internal/controllers/file.go index 9facf2f..4409637 100644 --- a/backend/internal/controllers/file.go +++ b/backend/internal/controllers/file.go @@ -90,7 +90,9 @@ func CreateUploadTask(c *echo.Context) error { CreatedAt: time.Now().Unix(), Expire: uploadTaskExpire, } - err = models.SetRedisFileInfo(fileId, newFileInfo) + err = models.SetRedisFileInfo(fileId, func(fileInfo *models.RedisFileInfo) *models.RedisFileInfo { + return &newFileInfo + }) if err != nil { return utils.HTTPErrorHandler(c, err) } @@ -233,8 +235,9 @@ func FinishUploadTask(c *echo.Context) error { } // 更新文件信息 - err = models.SetRedisFileInfo(r.FileId, models.RedisFileInfo{ - FileType: models.FileTypeUpload, + err = models.SetRedisFileInfo(r.FileId, func(fileInfo *models.RedisFileInfo) *models.RedisFileInfo { + fileInfo.FileType = models.FileTypeUpload + return fileInfo }) if err != nil { return utils.HTTPErrorHandler(c, err) diff --git a/backend/internal/services/file.go b/backend/internal/services/file.go index 8ff5ad5..68ccafc 100644 --- a/backend/internal/services/file.go +++ b/backend/internal/services/file.go @@ -71,18 +71,13 @@ func MergeFileSlices(fileId string, uploadPath string) (string, error) { if err != nil { return "", fmt.Errorf("打开切片文件失败: %v", err) } - defer sf.Close() //nolint:errcheck - for { - n, err := sf.Read(buffer) - if err == io.EOF { - break - } - if err != nil { - return "", fmt.Errorf("读取切片文件失败: %v", err) - } - if _, err := destFile.Write(buffer[:n]); err != nil { - return "", fmt.Errorf("写入合并文件失败: %v", err) - } + + if _, err := io.CopyBuffer(destFile, sf, buffer); err != nil { + sf.Close() //nolint:errcheck + return "", fmt.Errorf("合并切片文件失败: %v", err) + } + if err := sf.Close(); err != nil { + return "", fmt.Errorf("关闭切片文件失败: %v", err) } } return mergeFilePath, nil