D2L Valence - 将文件上传到组锁定

时间:2015-06-10 20:11:55

标签: php curl desire2learn

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

  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)

调用我正在尝试发送文件,但我得到的是404错误,没有提供响应。根据D2L的网站,404将表明该组不存在,这是不正确的,因为groupId是从第一个呼叫接收到的,并且适用于第二个呼叫。对于标题,我使用数组:

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

内容如下:

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

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

1 个答案:

答案 0 :(得分:2)

Locker文件上传使用simple upload (not resumable) pattern,但是,因为您发送了一个JSON文档以及文件数据,所以您必须使用带有POST的RFC2388多部分/混合模式。请参阅多部分混合模式的简单上载部分,以查看这些HTTP数据包的外观。

特别需要注意的是:HTTP内容类型为multipart/mixed不是 multipart/form。另外,请确保您实际上发送的是POST,而不是PUT。有些HTTP库在使用multipart\mixed有效负载时非常挑剔,您可能会发现自己不得不手工烹饪整个HTTP请求主体以正确格式化部件,并在发送之前稍微调整一下头部。请求。

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