如何使用moodle文件api存储文件并正确检索?

时间:2013-10-17 14:51:42

标签: api file plugins save moodle

我正在为moodle编写一个mod活动,它将文件和show'em加载到任何可以访问该课程的学生。

问题是在moodle中处理文件非常困难。

这是我到目前为止所做的:

带有导入程序的

选项页

$mform->addElement('filepicker', 'slidesyncmedia', get_string('slidesyncmedia', 'slidesync'), null, array('maxbytes' => $maxbytes, 'accepted_types' => '*'));

$mform->addElement('filemanager', 'slidesyncslides', get_string('slidesyncslides', 'slidesync'), null, array('subdirs' => 0, 'maxbytes' => $maxbytes, 'maxfiles' => 50, 'accepted_types' => array('*') ));

提交后,文件存储在草稿中 并且所有内容都加载到另一个保存db

的页面中
if ($draftitemid = file_get_submitted_draft_itemid('slidesyncmedia')) {
        file_save_draft_area_files($draftitemid, $context->id, 'mod_slidesync', 'slidesyncmedia', 0, array('subdirs' => 0, 'maxfiles' => 1));
    }
    if ($draftitemid = file_get_submitted_draft_itemid('slidesyncslides')) {
        file_save_draft_area_files($draftitemid, $context->id, 'mod_slidesync', 'slidesyncslides', 0, array('subdirs' => 0, 'maxfiles' => 50));
    }

最后我再次使用另一个地方的第一页(如果文件在那里,然后显示它们)

            $fs = get_file_storage();
        if ($files = $fs->get_area_files($context->id, 'mod_slidesync', 'slidesyncslides', '0', 'sortorder', false)) {
            // Look through each file being managed
            foreach ($files as $file) {
            // Build the File URL. Long process! But extremely accurate.
            $fileurl = moodle_url::make_pluginfile_url($file->get_contextid(), $file->get_component(), $file->get_filearea(), $file->get_itemid(), $file->get_filepath(), $file->get_filename());
            echo $fileurl;
            }
        } else {
            echo '<p>Please upload an image first</p>';
        }

这是一个网址,但如果点击moodle说该文件不存在 mysite.com/pluginfile.php/53/mod_slidesync/slidesyncslides/0/Koala.jpg

在db中文件正确保存!!!     53 mod_slidesync slidesyncslides 0 / Koala.jpg

我缺少什么?

感谢

1 个答案:

答案 0 :(得分:1)

很长一段时间过去但我正在处理插件并遇到同样的问题。 我设法解决它。

要提供创建以下内容所需的文件: 函数MYPLUGIN_pluginfile($ course,$ cm,$ context,$ filearea,$ args,$ forcedownload,array $ options = array())

以下是示例函数:https://docs.moodle.org/dev/File_API#Serving_files_to_users

请记住将最后一次调用send_file更改为Moodle 2.3 +中的send_stored_file