Web Services 使用REST Web服务功能在Moodle上上传作业

ulydmbyx  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(206)

我正在尝试开发一个Moodle Android应用程序。我正在使用MoodleREST源代码作为参考。但是这个库没有提供上传作业的其余代码。我希望能够通过Web服务调用从移动的客户端上传作业。使用Web视图上传作业是可能的,但在这种情况下,用户需要再次登录才能访问上传作业页面。
我在这里找到了类似的东西https://moodle.org/mod/forum/discuss.php?d=207875
我是Moodle的新手,还在学习它,所以我的问题可能有点天真,所以请容忍:)

7fyelxc5

7fyelxc51#

可以使用Moodle网络服务将提交的文件上传到作业中。
首先使用core_files_upload将文件上载到草稿
http://my-moodle-url/moodle/webservice/rest/server.php?wstoken=token_value_xyz&moodlewsrestformat=json&wsfunction=core_files_upload&component=user&filearea=draft&itemid=0&filepath=/&filename=test2.txt&filecontent=TWFuIGlzIGRpc3Rpbmd1aXNoZWQ=&contextlevel=user&instanceid=8
其中:
itemid=0 - moodle将生成并返回一个itemid或者您设置itemid
filecontent - base64编码的文件内容
instanceid -其为Web服务标记的用户ID
样本响应:

{
    "contextid": 26,
    "component": "user",
    "filearea": "draft",
    "itemid": 293005570,
    "filepath": "/",
    "filename": "test3.txt",
    "url": "http://my-moodle-url/moodle/draftfile.php/26/user/draft/293005570/test3.txt"
}

您可以使用mod_assign_get_assignments搜索下一个呼叫的分配ID
然后使用收到的项目ID,此处为“293005570”,格式为mod_assign_save_submission
http://my-moodle-url/moodle/webservice/rest/server.php?wstoken=token_value_xyz&moodlewsrestformat=json&wsfunction=mod_assign_save_submission&assignmentid=5&plugindata[onlinetext_editor][text] =some_text_here&plugindata[onlinetext_editor][format] =1&plugindata[onlinetext_editor][itemid]=521767865&plugindata[files_filemanager]=521767865
这将在此文件中添加作业提交。
问题我可以core_files_uploadmod_assign_save_submission只使用一个特定用户的Web服务令牌,即每个用户需要一个Web服务令牌,这可能是不切实际的。

{
    "exception": "moodle_exception",
    "errorcode": "nofile",
    "message": "File not specified"
}

用 Postman 测试。这可能与:https://tracker.moodle.org/browse/MDL-61276

mnemlml8

mnemlml82#

在Moodle网络服务中似乎没有现成的解决方案。Moodle实际上用base64编码文件,这给移动的设备带来了负担。移动设备没有那么多内存来编码大文件。Moodle HQ(和其他公司)发布的封闭解决方案是这样的:https://github.com/moodlehq/sample-ws-clients/blob/master/PHP-HTTP-filehandling/client.php将文件保存为私有文件而不是任务。您可能需要对插件进行大量修改。

bakd9h0s

bakd9h0s3#

为了上传文件,我使用这个API和POST方法
您的网址:
并且必须将以下参数作为FormData传递

  • file =〉文件//您的文件
  • token =〉Int //相同用户的wstoken
  • filearea =〉字符串//草稿,私有...等等
  • itemid =〉Int //设置为0以创建新文件

相关问题