最近做的功能多次涉及到导出功能,因为文件数据是动态的,所以每次导出都是新生成的文件。导出之后文件就不会再被用到。
解决这个问题的方法有很多,一般都是cron定时删除。而在Drupal中自带了这种机制。
Drupal把文件分为了public,private两种:
public下的文件是可以通过浏览器,知道路径后可访问的。
在private里边,无法直接访问,数据不会被看到。
同时,Drupal又把文件分为临时文件和永久文件:
临时文件指的是没有被任何地方引用的文件,这种文件在6h(默认,可配置)后自动删除。
(admin/content/files 在这个列表页可以看到文件的引用和状态信息。不论public还是private, 只要是没有地方引用的,status都是Temporary(临时文件))
在做导出功能的时候,为了数据的安全性,所以将系统生成的导出/下载文件指定到private下。但是private有没有访问权限;这时候可以在private下新增单独的文件夹专门存放导出/下载文件,然后使用pfdp module根据文件夹给某个角色分配权限。这样就可以让用户下载到private下的文件,同时又不影响其他文件的安全性。同时加了文件夹区分也方便后续的管理,如批量操作等等。
上述的方案最适合动态数据的单纯导出/下载功能。
PS1:临时目录并不在项目系统之中,而在项目所在的本地环境,比如本地电脑或docker容器下
PS2:这里的引用不包括手动添加的url等,需要是系统引用方式。
最后上文若有错误,请大佬不吝指正!