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 первой в списке частей, как в примерах шаблонов в документации.

Другие вопросы по тегам