404 Ошибка при попытке опубликовать тему файла

Я пытаюсь создать контент в моем d2l orgUnit, но я продолжаю получать страницу не найденную. Я звоню из эмулятора Android. Я успешно создал модуль, а также ссылку на тему, используя POST API. Я просмотрел этот пост 404 "Публикация контента на Desire2Learn", который помог мне получить работоспособность модуля и ссылки, но я просто не могу заставить загружать файл в качестве темы для работы. Я подозреваю, что это может быть URL, так как я не знал, что указать, поэтому я указал относительный путь, который создал в модуле org. В публикации 404 "Публикация контента в Desire2Learn" упоминается использование "действительного URL-адреса местоположения в пределах существующего пространства контента подразделения org". Я также попробовал папку /content/ принудительное / / в качестве URL, но безрезультатно. Я не уверен, если это проблема, или красная сельдь...

Вот мой код:

String body = "--xxBoundaryxx " +
    "Content-Type: application/json " +
    "{" +
    "\"Title\": \"Testing an upload\"," +
    "\"ShortTitle\": \"test\"," +
    "\"Type\": 1," +
    "\"TopicType\": 1," +
    "\"URL\": \"/test/\"," +
    "\"StartDate\": null," +
    "\"EndDate\": null," +
    "\"IsHidden\": false," +
    "\"IsLocked\": false" +
    " } " +
    "--xxBoundaryxx " +
    "Content-Disposition: form-data; name=\"file 0\"; filename=\"test.txt\" " +
    "Content-Type: text/plain " +
    "This is my sample file to try it out.";

URI uri = userContext.createAuthenticatedUri("/d2l/api/le/1.1/{OrgID}/content/modules/{ModuleID}/structure/", "Post");


DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(uri);
post.addHeader("Content-Type", "multipart/mixed; boundary=xxBoundaryxx");
post.setEntity(new StringEntity(body));

HttpResponse response = httpClient.execute(post);
Log.i(TAG, "Statusline: " + response.getStatusLine());

Вот результирующее тело (я также поставил \ r \ n для переносов строк, но это не помогло).

--xxBoundaryxx 
Content-Type: application/json 
{
    "Title": "Testing an upload",
    "ShortTitle": "test",
    "Type": 1,
    "TopicType": 1,
    "URL": "/test/",
    "StartDate": null,
    "EndDate": null,
    "IsHidden": false,
    "IsLocked": false
} 
--xxBoundaryxx 
Content-Disposition: form-data; name="file 0"; filename="test.txt" 
Content-Type: text/plain 
This is my sample file to try it out.

что здесь происходит? getStatusLine всегда возвращает ошибку 404... Я знаю, что это не проблема с разрешениями, поскольку я могу успешно создавать модули и связывать темы, используя очень похожий код. Любое руководство с благодарностью.

1 ответ

Вы почти наверняка нуждаетесь в конечной границе вашего тела POST (--xxBoundaryxx--). Для Url свойство в блоке JSON, который вы отправляете: вы можете отправить URL, который не является относительным (как в примере в документации); также кажется, что вы можете отправить только имя файла (относительное имя), и процесс загрузки помещает файл в корень области содержимого курса. Я полностью ожидал бы, что (а) если у вас нет абсолютного URL, он будет использовать корневую папку курса в качестве базовой части пути, и (б) действие API загрузки не создаст для вас каталоги, но я не комплексное тестирование вокруг того, как Url свойство обрабатывается.

Я протестировал это действие API на наших тестовых серверах, и оно работает (с полностью Url и просто имя файла для Url). Я также обновил документы Valence, включив в них конкретный пример пакета загрузки темы файла содержимого курса: надеюсь, эти две вещи помогут вам.

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