[BUG] 139(旧上传路径)和 Teldrive 覆盖上传时先删除原文件,上传失败或被取消后原文件丢失
维护者通常 3 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start with drivers/teldrive/driver.go around lines 227–231 and drivers/139/driver.go around lines 852–917; compare when each path removes the existing file and how the 139 new-upload path handles replacement. Then read the shared op.Put behavior and the drivers’ Rename implementations. Done means a failed or cancelled overwrite preserves the original file, while a successful overwrite installs the new one.
由索引模型根据 Issue 内容生成。
描述
请确认以下事项
-
我已确认阅读并同意 AGPL-3.0 第15条 。
本程序不提供任何明示或暗示的担保,使用风险由您自行承担。 -
我已确认阅读并同意 AGPL-3.0 第16条 。
无论何种情况,版权持有人或其他分发者均不对使用本程序所造成的任何损失承担责任。 -
我确认我的描述清晰,语法礼貌,能帮助开发者快速定位问题,并符合社区规则。
-
我已确认阅读了OpenList文档。
-
我已确认没有重复的问题或讨论。
-
我已确认是
OpenList的问题,而不是其他原因(例如 网络 ,依赖或操作)。 -
我认为此问题必须由
OpenList处理,而非第三方。 -
我已确认这个问题在最新版本中没有被修复。
-
我没有阅读这个清单,只是闭眼选中了所有的复选框,请关闭这个 Issue 。
OpenList 版本(必填)
v4.2.9
使用的存储驱动(必填)
中国移动云盘(139,存储类型为 personal,或 family / group 且开启了 use_old_stream_upload);Teldrive
问题描述(必填)
覆盖上传同名文件时,这两个驱动在新内容上传之前就把原文件删除了。上传一旦失败或被取消(网络中断、客户端断开、分片上传会话被中止或回收等),原文件已经没了,新文件也没有传上去,数据丢失。
-
Teldrive:
Put一开始发现目标已存在,就直接Remove,然后才开始上传。
https://github.com/OpenListTeam/OpenList/blob/e72822f5390f4272c9fe9da8cabba3c1a270182f/drivers/teldrive/driver.go#L227-L231 -
139 旧上传路径(存储类型
personal,或family/group开启了use_old_stream_upload):上传前先把同名旧文件改名、再删除。
https://github.com/OpenListTeam/OpenList/blob/e72822f5390f4272c9fe9da8cabba3c1a270182f/drivers/139/driver.go#L893-L917作为对比,139 的新上传路径是在上传完成之后才删除旧文件、再把新文件改回原名,没有这个问题:
https://github.com/OpenListTeam/OpenList/blob/e72822f5390f4272c9fe9da8cabba3c1a270182f/drivers/139/driver.go#L852-L889
修复思路(供参考):
- 把删除旧文件挪到上传成功之后,和 139 新上传路径一致;或者
- 在驱动的
config里设置NoOverwriteUpload: true,去掉驱动里自己的删除逻辑,交给op.Put统一处理"上传前把旧文件改名挪开、失败后改回"。两个驱动都已实现Rename。上传被取消时的恢复问题在 #3330 中修复。
日志(必填)
无。这是在排查 #3178(取消的上传误删文件)时,通过代码审查发现的同类问题。我手头没有 139 和 Teldrive 账号,未实际运行复现。
配置文件内容(必填)
不适用:未实际运行,问题来自代码审查。
复现链接(可选)
无(需要对应网盘的账号)。按代码推测的复现步骤:
- 在 Teldrive 存储中已有文件
a.bin(139 同理,存储类型为personal); - 在网页上用同名文件
a.bin覆盖上传,文件大一些,便于中途操作; - 上传进行中取消上传或断开网络;
- 刷新列表:原来的
a.bin已经不存在。
AI生成内容
- 我使用了AI工具生成此内容
- 我没有使用AI工具生成此内容
AI模型是
Claude Opus 5.5(Claude Code)
- 主要语言
- Go
- 星标
- 25.3k
- 派生
- 2.4k
- 平均合并
- 3 天 1 小时
- 30 天内合并 PR
- 30
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
OpenListTeam/OpenList 的其他 Issue
-
[BUG] 115 驱动分片上传丢弃 errCh 真实错误,导致 nil 指针 panic / WebDAV 405可能已有人在做 @Suyunmeng 于 4 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 74/100
OpenListTeam/OpenList#3201 ·
维护者通常 3 天内回复
-
[BUG] PikPak 上传 no such host:OSS endpoint 落在 .net 侧(无任何 DNS 记录),附取证与已验证修法可能已有人在做 @adsf0427 于 19 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 82/100
OpenListTeam/OpenList#2986 · 2 条评论 ·
维护者通常 3 天内回复
-
[BUG] 解绑 SSO/OIDC 账号后重新登录报错:UNIQUE constraint failed: x_users.username (2067)可能已有人在做 @Suyunmeng 于 5 天前认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 72/100
OpenListTeam/OpenList#2872 · 2 条评论 · 2 个 reaction ·
维护者通常 3 天内回复
-
bug
难度 4/5 3-5 天 新手友好度 48/100
OpenListTeam/OpenList#3334 ·
维护者通常 3 天内回复
-
难度 4/5 3-5 天 新手友好度 54/100
OpenListTeam/OpenList#3328 ·
维护者通常 3 天内回复
查看 OpenListTeam/OpenList 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 66/100
caddyserver/caddy#8314 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
-
难度 2/5 1-3 小时 新手友好度 72/100
hashicorp/golang-lru#245 ·
-
graphite: empty metric registry logs nil as an error and still dials可能已有人在做 @helmipradita 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
prometheus/client_golang#2203 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
spotify/flink-on-k8s-operator#1075 ·