D2L Valence - 将文件上传到群组储物柜

D2L Valence - Uploading file to a group locker

我的目标是为 class 中的每个人创建一个群组储物柜,并将文件上传到该储物柜。所以我先打电话给

  POST /d2l/api/lp/(version)/(orgUnitId)/groupcategories/

为了创建一个类别。这也会为每个用户创建一个组并自动注册他们。然后我通过调用

为类别中的每个组创建一个储物柜
POST /d2l/api/lp/(version)/(orgUnitId)/groupcategories/(groupCategoryId)/locker

这非常有效,此时每个学生都有自己的小组,并为小组分配了一个储物柜。然后是文件上传部分。 使用

POST /d2l/api/le/(version)/(orgUnitId)/locker/group/(groupId)/(path)

call 我正在尝试发送文件,但我得到的只是一个 404 错误,没有提供任何响应。根据 D2L 的网站,404 表示该组不存在,这是不正确的,因为 groupId 是从第一次调用中收到的,并且适用于第二次调用。对于 header 我使用数组:

$h = array(
        'Content-Type: multipart/form-data', 
);

内容是:

$contents = array("FileDescription" => json_encode(
     array("Description" => "YY", 
           "IsPublic" => true
      )),
       "FILEFILE");

POST是使用cURL(php)执行的,代码主要是D2L网站上提供的代码(doValenceRequest函数的修改版)。我尝试了多种不同的 headers,以及内容数组的不同格式。无论我做什么,都会返回 404 错误。我什至尝试只创建一个简单的文件夹而不是上传文件,但遇到了同样的问题。我做错了什么吗?

Locker 文件上传使用 simple upload (not resumable) pattern,但是,因为您发送 JSON 文档 以及 文件数据,您必须使用 RFC2388 multipart/mixed 模式,带有 POST。请参阅有关 multi-part 混合模式的简单上传部分,了解这些 HTTP 数据包的外观。

特别注意:HTTP content-type 是 multipart/mixed 不是 multipart/form。另外,请确定您实际上发送的是 POST,而不是 PUT。一些 HTTP 库对 multipart\mixed 有效载荷的使用非常挑剔,您可能会发现自己必须 hand-cook 整个 HTTP 请求 body 才能正确格式化部分,并调整 headers 一点,在你发送请求之前。

另请注意,您应该始终发送 JSON 文档部分 首先 在部分列表中,就像文档中的模式示例一样。