当drupal版本大于8.4可能会遇到这样的问题,删除带附件的entity和media时,附件文件永远也不会被系统删除,这个问题有官方解释:https://www.drupal.org/node/2…大概意思是,某些文件可能会放到媒体库并被多处引用,如果删除了media就把文件彻底删除,其它引用该文件就会出现文件缺失的现象。为了解决这个问题,官方选择了默认情况下不删除附件的方式,这就是导致文件无法彻底删除的主要原因。如果需要系统彻底删除文件,需要开启make_unused_managed_files_temporary参数,把以下代码加到settings.php中即可:$config[‘file.settings’][‘make_unused_managed_files_temporary’] = true;$config[‘system.file’][’temporary_maximum_age’] = 1; // 1秒后系统自动删除文件由于删除文件的代码位于file_cron(),所以无论时间设置得再短,也需要等到下次执行cronjob时才被真正删除。以下说一说file的数据表结构。关于file记录,drupal主要用到了两个数据表,file_managed与file_usage。file_managed记录了文件的物理位置与状态,当状态为0是临时文件,临时文件会最终被系统删除,而状态为1则不会被系统删除。file_usage记录了文件被引用的次数,当开启了make_unused_managed_files_temporary后引用次数为0时,文件在file_managed里的状态会从1变为0,系统就会定时清除这些文件。但这个引用次数并不准确,例如文件在内容正文中以链接方式被引用,系统将无法得知这个链接会何时被删,也就无法给引用计数加一。