问题描述
当前种子简介通过 [attach]dlkey[/attach] 引用 attachments 表中的附件。删除种子时,deletetorrent() 会清理种子、评论、 peers、文件列表等数据,但不会处理种子简介中引用的附件。
因此,种子删除后会持续产生孤立数据:
attachments 表中的无效记录
local 驱动保存在 attachments/ 目录中的原图和缩略图
chevereto、lsky 等远端图床中的孤立图片
这个问题与具体图床无关,所有附件存储驱动都受影响。站点长期运行后会持续占用数据库、本地磁盘或远端图床容量。
相关位置:
include/functions.php 中的 deletetorrent()
nexus/Attachment/Storage.php
public/attachment.php
attachments 表的 dlkey、location、driver 字段
建议行为
建议增加统一的附件生命周期管理,而不是在单个图床驱动中单独处理:
- 删除种子前,从种子简介及相关自定义字段中提取
[attach]dlkey[/attach]。
- 删除附件前检查它是否仍被其他种子、论坛帖子等内容引用,避免误删复用附件。
- 在附件存储抽象中增加删除能力,例如
delete(string $location),或新增可选的 DeleteCapableStorage 接口。
local 驱动删除原图及 .thumb.jpg 缩略图。
- 远端驱动根据各自 API 删除远端文件;不支持删除或缺少远端标识时应记录警告,不应阻塞种子删除。
- 删除实际文件成功或确认无需保留后,清理
attachments 表记录及相关缓存。
- 远端删除建议使用队列、失败重试和操作日志,避免外部图床故障阻塞种子删除流程。
兼容性建议
- 建议提供后台开关,允许站点选择是否在删除种子时清理未引用附件。
- 手工插入的
[img]URL[/img] 不应自动删除,因为无法可靠确认所有权。
- 被多个内容复用的
[attach] 附件必须保留。
- 对现有站点可增加一个 Artisan 命令或定时任务,扫描并清理历史孤立附件;建议支持 dry-run。
- 历史远端附件可能没有保存删除所需的 remote ID/delete key,应兼容为“仅清理可安全识别和删除的附件”。
当前实际表现
deletetorrent() 当前没有解析附件引用,也没有调用任何存储驱动的删除逻辑。附件存储抽象目前只有上传和生成访问地址的能力,因此 local、chevereto、lsky 都会产生相同的孤立数据问题。
问题描述
当前种子简介通过
[attach]dlkey[/attach]引用attachments表中的附件。删除种子时,deletetorrent()会清理种子、评论、 peers、文件列表等数据,但不会处理种子简介中引用的附件。因此,种子删除后会持续产生孤立数据:
attachments表中的无效记录local驱动保存在attachments/目录中的原图和缩略图chevereto、lsky等远端图床中的孤立图片这个问题与具体图床无关,所有附件存储驱动都受影响。站点长期运行后会持续占用数据库、本地磁盘或远端图床容量。
相关位置:
include/functions.php中的deletetorrent()nexus/Attachment/Storage.phppublic/attachment.phpattachments表的dlkey、location、driver字段建议行为
建议增加统一的附件生命周期管理,而不是在单个图床驱动中单独处理:
[attach]dlkey[/attach]。delete(string $location),或新增可选的DeleteCapableStorage接口。local驱动删除原图及.thumb.jpg缩略图。attachments表记录及相关缓存。兼容性建议
[img]URL[/img]不应自动删除,因为无法可靠确认所有权。[attach]附件必须保留。当前实际表现
deletetorrent()当前没有解析附件引用,也没有调用任何存储驱动的删除逻辑。附件存储抽象目前只有上传和生成访问地址的能力,因此local、chevereto、lsky都会产生相同的孤立数据问题。