修复: SFTP连接首拉不显示与传输挂起

- watcher握手期伪触发致幻影本地列表,根因修复
- 连接探测2.5s超时竞速,握手10s预算
- 30s保活自动掐死半开连接,取连接时剔除已断开
- 副本命名与进度计数抽公共,下载缓存清理去重
This commit is contained in:
lxy
2026-09-15 22:26:22 +08:00
parent e7a2c5148e
commit 6ea9d9ac99
9 changed files with 731 additions and 125 deletions
+18
View File
@@ -2,6 +2,8 @@ package main
import (
"fmt"
"path"
"path/filepath"
"strconv"
"strings"
"time"
@@ -124,6 +126,22 @@ func (a *App) SftpDownloadToTempCached(connID string, remotePath string, fileSiz
return a.ensureSftpService().DownloadToTempCached(connID, remotePath, fileSize, modTime)
}
// SftpDownloadToFile 下载远程文件/目录到用户指定目录(流式无上限,重名自动副本),返回本地落地路径
func (a *App) SftpDownloadToFile(connID string, remotePath string, localDstDir string) (string, error) {
emitter := newTransferEmitter(a, "download", path.Base(remotePath))
localPath, err := a.ensureSftpService().DownloadToFile(connID, remotePath, localDstDir, emitter.progress)
emitter.finish(err)
return localPath, err
}
// SftpUploadFromFile 上传本地文件/目录到远程目录(流式,目录递归,重名自动副本)
func (a *App) SftpUploadFromFile(connID string, localPath string, remoteDir string) error {
emitter := newTransferEmitter(a, "upload", filepath.Base(localPath))
err := a.ensureSftpService().UploadFromFile(connID, localPath, remoteDir, emitter.progress)
emitter.finish(err)
return err
}
// SftpGetCommonPaths 获取 SFTP 远程主机常用路径
func (a *App) SftpGetCommonPaths(connID string) (map[string]string, error) {
return a.ensureSftpService().GetCommonPaths(connID)