【问题标题】:How to store a file in Moodle so that it is accessible for an external application?如何在 Moodle 中存储文件以便外部应用程序可以访问它?
【发布时间】:2011-07-12 15:16:47
【问题描述】:

我需要在 Moodle 中存储一个文件。这不是一个真正的问题,它解释了here。问题是这个文件必须可供所有人访问。因此,必须有一个 URL,例如www.mymoodlesite.com/temp/myfile.txt 或类似的,可以在浏览器中输入并访问文件。我想将文件复制到 moodledata/temp 文件夹中,但后来我没有 URL 来访问该文件..

提前感谢您的帮助!

【问题讨论】:

    标签: php file file-io moodle


    【解决方案1】:

    终于可以解决我的问题了:-)

    我使用了这样的文件管理器:

    $mform->addElement('filemanager', 'my_filemanager', 'Upload a file', null, array('maxbytes' => $CFG->maxbytes, 'maxfiles' => 1, 'accepted_types' => array('*.zip')));
    

    然后像这样保存上传的文件:

    if ($draftitemid = file_get_submitted_draft_itemid('my_filemanager')) {
        file_save_draft_area_files($draftitemid, $context->id, 'mod_assignment', 'my_filemanager', 0, array('subdirs' => false, 'maxfiles' => 1));
    }
    

    然后可以像这样创建用于访问上传文件的 URL:

    file_encode_url($CFG->wwwroot . '/pluginfile.php', '/' . $this->context->id . '/mod_assignment/my_filemanager');
    

    【讨论】:

      【解决方案2】:

      假设你已经添加了这样的元素:

      $mform->addElement('filepicker', 'file', "Upload a Document", null, array('maxbytes' => 1024*1024, 'accepted_types' =>array('*.png', '*.jpg', '*.gif','*.jpeg', '*.doc', '*.rtf','*.pdf','*.txt')));
      

      现在假设你得到如下数据

      $data = $lesson_form->get_data()
      

      请参阅下面的代码将文件上传到服务器中的指定文件夹。这与moodle 2.2+兼容

      $realfilename = $lesson_form->get_new_filename('file'); // this gets the name of the file
      
          $random =rand(); // generate some random number
          $new_file = $random.'_'.$realfilename; //add some random string to the file
          $dst = "uploads/$new_file";  // directory name+ new filename
      
          if($realfilename !=''){  // checking this to see if any file has been uploaded
      
              save_files($dst); // moodle function to save a file in given folder
      
          }
      

      我遇到了和你一样的问题,它解决了我的问题。

      注意-> 记得把你的上传文件夹改成 0777。

      【讨论】:

        【解决方案3】:

        如果以下情况属实,您可以在不经过身份验证的情况下访问通过moodle的文件浏览器上传的文件 - 您的 moodle 网站已将 forcelogin 设置为 no - 您的文件已上传到首页站点文件中的文件。

        上传的文件保存在moodledata/1/{filepath}中(假设为Moodle1.9)。由于您必须以编程方式执行此操作,您可以将它们存储在那里并使用 url /file.php/1/{filepath} 引用它们。换个方式说吧。保存到 $CFG->datadir.'/1/'.filepath 的文件可以通过 $CFG->wwwroot.'/file.php/1/'.filepath 访问;

        或者,如果您不希望文件通过moodle 文件浏览器显示在您的首页站点文件中,您可以编辑file.php 以忘记检查位于您的特殊目录中的文件的权限,而只是提供它们。

        希望这对这次编辑更有帮助。

        【讨论】:

        • 我必须以编程方式创建/上传/保存文件...否则我不会在 StackOverflow 中发布问题...
        猜你喜欢
        • 1970-01-01
        • 2015-12-20
        • 2014-06-10
        • 1970-01-01
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        • 2015-12-09
        • 2015-08-30
        相关资源
        最近更新 更多