我的目标是为班级中的每个人创建一个群组储物柜,并将文件上传到该储物柜。所以首先我要打电话
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错误。我甚至试图创建一个简单的文件夹而不是上传文件,但是遇到了同样的问题。我做错了吗?
答案 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 ,就像文档中的模式示例一样。