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, включив в них конкретный пример пакета загрузки темы файла содержимого курса: надеюсь, эти две вещи помогут вам.