【问题标题】:Moodle File API : multiple rows?Moodle File API:多行?
【发布时间】:2017-03-23 07:58:21
【问题描述】:

在 Moodle 表单中,我使用 filemanager 元素执行文件上传:

$mform->addElement('filemanager', 'attachment',get_string('displayedcontent', 'block_helloworld'), null, $filemanageropts);

一旦表单被验证,当我在数据库中记录我的实例时,我也会使用以下函数保存上传的文件:

file_save_draft_area_files($form_submitted_data->attachment, $context->id, 'block_helloworld', 'attachment',
    $form_submitted_data->attachment, array('subdirs' => 0, 'maxbytes' => 500000, 'maxfiles' => 1));

这工作正常,但是当我查看 DB 表 mdl_files 时,我看到我的文件有 4 行:

component       fileare     itemid  filepath    filename
block_helloworld    attachment  706783489   /   .
block_helloworld    attachment  706783489   /   test5.pdf
user    draft   706783489   /   .
user    draft   706783489   /   test5.pdf

在我的组件block_helloworld 和组件user 中有两行我上传的文件。 一行有文件名,而另一行没有!

这听起来很奇怪。这正常吗? 当我执行文件删除时,如何删除所有这些文件?

注意:我使用的是moodle v3.0.6

【问题讨论】:

  • 您使用的是哪个 Moodle 版本?

标签: moodle moodle-api


【解决方案1】:

这4个条目是:

  • 您的文件所在的文件夹
  • 文件本身
  • 在编辑表单时存储文件草稿版本的文件夹
  • 编辑表单时的草稿文件

草稿文件会在一天左右后自动清理。

【讨论】:

  • 好的,当我实现删除页面时,我只需要删除我的组件block_helloworld 的两行(并且不关心user 组件行)?
  • 如果它在块上下文中并且你正在删除块,那么 Moodle 应该会自动清理。如果没有,只需使用 files API 删除该区域 - 您永远不需要直接访问 mdl_files。
  • 当然,我只会使用内置文件 API 执行文件删除,但是当我执行删除时,我只有具有被删除文件名的行。 filename='.' 所在的行仍在 mdl_files 中。这正常吗?我是否也应该使用文件 API 添加代码来删除这一行?
  • 你只是删除单个文件,还是调用 $fs->delete_area_files(...) 删除整个区域?
  • 我正在删除从 $fs->get_area_files(...) 检索到的单个文件,它返回大小为 1 的数组。因此,filename='的行。仍在mdl_files 表中。我可以试试$fs->delete_area_files(...) 受限于 $itemid 吗?
【解决方案2】:

据我所知,这是正常行为。我也遇到过这个问题,但是当您交叉检查(例如将文件上传到课程中)时,您会注意到也有 2 行。不确定,为什么,但对我来说这是正常行为

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多