附件上传的文件,在删除后,磁盘上的目录内实际还是在的。

* 描述问题

附件字段上传的照片一类的文件在删除后,在实际的目录里的文件还是存在,不会同时删除对应的文件,这样的话如果上传错误或要删除没用的照片后还需要手动去磁盘上找对应的文件再删除,不然时间久了这些目录里的文件真的成垃圾堆了,想备份就把没用的文件也一起备份进去了。

* 运行环境

  • NocoBase 版本: * v1.3.44-beta
  • 数据库种类与版本: PostgreSQL
  • 操作系统:deeping
    -浏览器及版本:龙芯浏览器
  • 部署方式:Docker,
  • Docker 镜像版本:v1.3.44-beta
  • NodeJS 版本:

如何重现

上传附件,然后删除,再到附件在磁盘上的实际目录里看还是在的。

预期行为

附件内删除后,对应磁盘上的文件也应同步删除。

截图

日志

如果只是删除了含有附件字段的数据记录,附件(内置表)本身的记录目前不会被删除。未来我们会改进这块,开放内置的附件表可管理。

如果需要精细管理相关文件,可以使用自定义的文件表,删除文件表的记录只要在对应存储引擎上勾选了“删除记录时同时删除文件”,即可一并删除。


自定义的文件表里没有这个选项啊

是在相应的文件存储中设置,例如你的图上是“Local storage”,那么在文件管理器对这个存储空间进行管理。

全都找过了,没有地方有这样的选项啊

就是最下面这个配置:“删除记录时保留文件”,没有勾选就是对的。这里的记录指的就是文件表的记录,而不是使用文件表作为关联字段的主表的记录。所以这种情况下,在文件表的区块内删除记录是可以删除文件的。

感谢多次回复,已经多次测试了,通过文件数据表去存储也是一样的,全部新建了存储和文件数据表,确保删除文件保留的勾没有打上过,只有Markdown(Vditor) 字段能用这个文件数据表的,在里面上传图片并提交,然后打开再删除图片,文件数据表内的那条记录也没被删除,磁盘上的对应的上传图片文件也是没删除。

以下是新建的存储

以下是在Markdown(Vditor) 字段里删除图片后还是留着的记录

以下是磁盘上的文件也没被删除。

是的,我上面的回答也是在说明 只有删除文件表的记录 才会删除对应文件。编辑器里删除文件地址的引用是无法触发删除文件表记录的。

我刚才也测试过,需要在文件表删除记录才可以。

试了,要去表里删除才行,正常这样操作不了,使用人不会管这个的,谢谢回复,希望早日改进!

那如果我要清理过期的附件,该怎么做呢?(纯小白的疑问)

需要从业务上定义过期的附件,然后暂时可以根据定义的逻辑在后端写一个脚本来清理。或者使用工作流定时任务配合 JavaScript 节点进行复杂的处理。