D2L Valence - загрузка файла в групповой шкафчик
Моя цель - создать групповой шкафчик для каждого человека в классе и загрузить файл в этот шкафчик. Итак, сначала я звоню
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");
POST выполняется с использованием cURL (php), а код в основном представляет собой код, представленный на веб-сайте D2L (модифицированная версия функции doValenceRequest). Я пробовал несколько разных заголовков, а также разные форматы для массива содержимого. Независимо от того, что я делаю, ошибка 404 возвращается. Я даже пытался создать простую папку вместо загрузки файла, но у меня возникла та же проблема. Я делаю что-то неправильно?
1 ответ
При загрузке файла блокировщика используется шаблон простой загрузки (не возобновляемый), но, поскольку вы отправляете документ JSON вместе с данными файла, вы должны использовать шаблон multipart / mixed RFC2388 с POST. См. Простой раздел загрузки о смешанных шаблонах, состоящих из нескольких частей, чтобы увидеть, как выглядят эти HTTP-пакеты.
Особого внимания заслуживает HTTP-тип контента multipart/mixed
и не multipart/form
, Кроме того, убедитесь, что вы отправляете сообщение POST, а не PUT. Некоторые HTTP-библиотеки довольно привередливы в использовании multipart\mixed
полезных нагрузок, и вам может понадобиться вручную обработать все тело HTTP-запроса, чтобы правильно отформатировать части, и немного настроить заголовки перед отправкой запроса.
Также обратите внимание, что вы всегда должны отправлять часть документа JSON первой в списке частей, как в примерах шаблонов в документации.