解决Moodle自定义form的文件上传,会被系统自动删除
问题:
二次开发Moodle的时候,在继承系统自带moodleform类来实现表单提交时,通过使用系统自带的文件上传(filemanager、filepicker)会出现文件上传一段时间后会自动被系统删除(丢失),导致文件获取失败。
原理分析:
1.使用系统自带的文件上传,当把文件放在上传框时,系统就已经把此文件上传到服务器上。
2.系统文件上传保存在files表中,其中files表字段:contenthash为默认保存在$CFG->dataroot/filedir/下的文件名(文件开头4个字符串为它的父级文件夹),值为文件内容的唯一标识,如果两个文件相同会指向同一个地方,以下是files表部分重要字段意义:
Pathnamehash为
sha1("{$context->id}/{$component}/{$filearea}/{$itemid}/{$filename}")
的值,可以给get_file_by_hash传参;
Contextid为context表的id,此决定了这个文件属于哪个模块下的。当使用自定义的form时,如果不关联任何系统现有的,可以关联进主题包的context&