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
相关产品推荐
相关产品推荐

