You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言POST上传文件后本地文件莫名被删除问题求助

排查Go上传脚本后本地文件消失的问题

核心结论

你贴出的客户端代码没有任何主动删除文件的逻辑,文件消失的原因大概率在代码之外或未展示的逻辑中,以下是具体排查方向和验证步骤:

排查方向

1. 服务端逻辑导致

如果服务端与客户端在同一机器/共享存储环境下,检查服务端的上传处理代码:

  • 是否存在处理完上传后删除源文件的逻辑(比如os.Remove/os.RemoveAll调用)
  • 是否有定时清理机制,会自动删除上传目录下的文件

2. 第三方工具/系统机制干扰

  • 杀毒软件:部分杀毒软件会误判上传的文件为恶意文件并自动删除
  • 系统清理工具:Windows磁盘清理、第三方临时文件清理软件可能扫描并删除指定目录的文件
  • 备份/同步工具:如果该文件目录被同步到云盘或其他存储,同步工具可能执行删除操作

3. 代码隐性问题

  • 检查项目其他代码片段:是否有协程、后续逻辑调用了删除该文件的方法
  • 路径验证:确认u.LogFilePath的实际路径与你复制文件的路径完全一致,避免因路径错误导致“误以为文件被删除”的情况(比如Windows下路径分隔符、大小写差异)

验证步骤

步骤1:定位文件消失的时间节点

在上传前后添加文件存在性检查,确认文件是在哪个阶段消失的:

func upload(u *Param) {
    // 上传前检查
    if _, err := os.Stat(u.LogFilePath); err != nil {
        log.Printf("[PRE UPLOAD] File not found: %v", err)
    } else {
        log.Println("[PRE UPLOAD] File exists")
    }

    // 原代码逻辑...
    param := url.Values{}
    param.Add("partIndex", u.PartIndex)
    param.Add("partFileMd5", u.PartFileMD5)

    writer, bff := createUploadFile(u.LogFilePath)
    url := os.Getenv(consts.HOST) + "/upload" + "?" + param.Encode()
    
    // 先注释请求调用,验证本地逻辑是否有问题
    // resp, err := http.Post(url, writer.FormDataContentType(), bff)
    
    // 上传后检查
    if _, err := os.Stat(u.LogFilePath); err != nil {
        log.Printf("[POST UPLOAD] File not found: %v", err)
    } else {
        log.Println("[POST UPLOAD] File exists")
    }

    // 原后续逻辑...
}
  • 如果注释请求后文件仍消失:问题出在本地未展示代码或系统工具
  • 如果注释请求后文件正常:问题出在服务端或请求触发的远程操作

步骤2:隔离服务端影响

更换一个独立的测试文件(不在共享目录、非同步文件夹),重新执行上传,观察文件是否消失。

步骤3:排除第三方工具干扰

暂时关闭杀毒软件、系统清理工具、同步工具,再执行测试。

内容的提问来源于stack exchange,提问作者koushin syu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:02:35