Compare commits

...

3 Commits

Author SHA1 Message Date
ygxbnet b100fc9b32 fix(upload): 修正上传文件清空确认对话框文本
构建上传工具 / build (push) Successful in 1m51s
- 修正了标题文本"是否确认清空需要上传文件"
- 修正了提示文本中的"tmp"文件夹显示格式
- 更新了确认对话框的内容描述文本
2026-05-01 22:51:12 +08:00
ygxbnet d426c16104 refactor(uploader): 优化上传器代码结构和上下文取消处理
- 在进度更新循环中添加上下文取消检查点
- 在文件复制操作前添加上下文取消检查点
- 重构代码缩进和括号位置以提高可读性
- 优化 goroutine 中的上下文取消处理逻辑
- 统一代码块的括号格式和缩进风格
2026-05-01 22:47:39 +08:00
ygxbnet 993814cdfa refactor(uploader): 优化文件信息统计逻辑
- 将变量名 fInfo 重命名为 filesInfo 以提高可读性
- 调整代码顺序,将 AddLog 调用移到变量声明后
- 统一使用新变量名在所有相关位置进行引用
- 移动 g.SetLimit 注释位置以提高代码可读性
2026-05-01 22:37:45 +08:00
2 changed files with 112 additions and 88 deletions
@@ -40,7 +40,7 @@ const handleConfirm = () => {
align-center
>
<template #header>
是否确认清空上传文件
是否确认清空需要上传文件
</template>
<div class="hint-text">以下文件将会被清空并移动到 tmp 文件夹进行上传,您是否确认</div>
<div class="dialog-content">
+41 -17
View File
@@ -57,6 +57,8 @@ func StartUpload(ctx context.Context, logChan *chan string) {
case <-ctx.Done():
return
default:
}
var pg []Progress
progress.Range(func(_, value any) bool {
pg = append(pg, value.(Progress))
@@ -66,12 +68,12 @@ func StartUpload(ctx context.Context, logChan *chan string) {
time.Sleep(250 * time.Millisecond)
}
}
}()
//开启上传程序
for {
uploadData(ctx, logChan)
select {
case <-ctx.Done():
return
@@ -120,6 +122,12 @@ func uploadData(ctx context.Context, logChan *chan string) {
if config.APPConfig.ClearFilesNoPrompt {
//不用提示直接复制文件到tmp
for _, p := range f {
select {
case <-ctx.Done():
return
default:
}
err := copyFile(p, "./tmp/"+filepath.Base(p))
if err != nil {
AddLog(logChan, "复制文件失败:"+err.Error())
@@ -143,6 +151,12 @@ func uploadData(ctx context.Context, logChan *chan string) {
if <-confirm {
for _, p := range f {
select {
case <-ctx.Done():
return
default:
}
err := copyFile(p, "./tmp/"+filepath.Base(p))
if err != nil {
AddLog(logChan, "复制文件失败:"+err.Error())
@@ -163,16 +177,18 @@ func uploadData(ctx context.Context, logChan *chan string) {
//检测到文件
//统计文件行数
var fInfo = make(map[string]fileInfo)
AddLog(logChan, fmt.Sprintf("正在统计 %v 个文件行数", len(files)))
var filesInfo = make(map[string]fileInfo)
isAllEmpty := true
AddLog(logChan, fmt.Sprintf("正在统计 %v 个文件行数", len(files)))
for _, filePath := range files {
select {
case <-ctx.Done():
return
default:
}
file, err := os.Open(filePath)
if err != nil {
AddLog(logChan, "打开文件失败:"+err.Error())
@@ -189,7 +205,7 @@ func uploadData(ctx context.Context, logChan *chan string) {
if lineCount == 0 {
continue
}
fInfo[filepath.Base(filePath)] = fileInfo{
filesInfo[filepath.Base(filePath)] = fileInfo{
FilePath: filePath,
FileLines: lineCount,
}
@@ -198,7 +214,6 @@ func uploadData(ctx context.Context, logChan *chan string) {
AddLog(logChan, fmt.Sprintf("%s 文件行数:%v", filepath.Base(filePath), lineCount))
}
}
if isAllEmpty {
AddLog(logChan, "所有文件都为空,不进行上传")
@@ -207,7 +222,7 @@ func uploadData(ctx context.Context, logChan *chan string) {
//刷新文件上传进度
progress.Clear()
for fileName, info := range fInfo {
for fileName, info := range filesInfo {
progress.Store(fileName,
Progress{
FileName: fileName,
@@ -220,18 +235,23 @@ func uploadData(ctx context.Context, logChan *chan string) {
// 使用 errgroup 控制同时处理的文件数,并开始上传文件任务
g, egctx := errgroup.WithContext(ctx)
g.SetLimit(config.APPConfig.HandleFileCount) // 设置同时处理文件数
// 设置同时处理文件数
g.SetLimit(config.APPConfig.HandleFileCount)
// 执行文件上传任务参数(文件路径,文件行数)
for fileName, info := range fInfo {
for fileName, info := range filesInfo {
select {
case <-egctx.Done():
return
default:
}
g.Go(func() error {
select {
case <-egctx.Done():
return egctx.Err()
default:
}
AddLog(logChan, "正在上传文件:"+fileName)
processFile(egctx, logChan, info.FilePath, info.FileLines)
@@ -240,29 +260,29 @@ func uploadData(ctx context.Context, logChan *chan string) {
case <-egctx.Done():
return egctx.Err()
default:
}
//上传完成,删除缓存文件
err := os.Remove(info.FilePath)
if err != nil {
AddLog(logChan, "删除缓存文件失败:"+err.Error())
}
return nil
}
}
})
}
}
select {
case <-ctx.Done():
return
default:
}
// 等待所有任务完成
g.Wait()
AddLog(logChan, "所有任务执行完成!")
AddLog(logChan, fmt.Sprintf("上传完成,耗时:%s", time.Since(start).String()))
}
}
// copyFile 快速拷贝文件 src -> dst
func copyFile(src, dst string) error {
@@ -335,11 +355,12 @@ func processFile(ctx context.Context, logChan *chan string, filePath string, fil
close(lines)
return
default:
}
go func() {
processLines(ctx, logChan, &lines, i, filePath, &countLine)
}()
}
}
// 读取文件并发送到通道
scanner := bufio.NewScanner(file)
@@ -355,8 +376,9 @@ func processFile(ctx context.Context, logChan *chan string, filePath string, fil
case <-ctx.Done():
return
default:
lines <- scanner.Text()
}
lines <- scanner.Text()
}
}()
@@ -367,6 +389,8 @@ func processFile(ctx context.Context, logChan *chan string, filePath string, fil
close(lines) //关闭processLines中的上传线程
return
default:
}
progress.Store(filepath.Base(filePath),
Progress{
FileName: filepath.Base(filePath),
@@ -376,7 +400,6 @@ func processFile(ctx context.Context, logChan *chan string, filePath string, fil
},
)
}
}
//上传完成,进度设为100
progress.Store(filepath.Base(filePath),
Progress{
@@ -403,6 +426,8 @@ func processLines(ctx context.Context, logChan *chan string, lines *chan string,
case <-ctx.Done():
return
default:
}
// 跳过空行
if strings.TrimSpace(line) == "" {
continue
@@ -414,7 +439,6 @@ func processLines(ctx context.Context, logChan *chan string, lines *chan string,
atomic.AddInt32(countLine, 1)
}
}
}
// AddLog 添加日志
func AddLog(logChan *chan string, message string) {