Я пытаюсь создать контент в моем d2l orgUnit, но я продолжаю получать страницу 404, которая не найдена. Я вызываю это из эмулятора Android. Я успешно создал модуль, а также ссылку на тему, используя API POST. Я просмотрел этот пост 404 Posting Content to Desire2Learn, который помог мне получить модуль и ссылку, но я просто не могу загрузить файл в качестве темы для работы. Я подозреваю, что это URL-адрес, поскольку я не был уверен, что положить, поэтому я поместил относительный путь, который я создал в подразделении org. В сообщении 404 Posting Content to Desire2Learn упоминается «действительный URL-адрес местоположения в пределах существующего пространства содержимого организационного подразделения». Я также попробовал папку/content/enforced/... в качестве URL-адреса безрезультатно. Я не уверен, если это вопрос, или отвлекающий маневр ...404 Ошибка при попытке опубликовать файл темы
Вот мой код:
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());
Вот результирующее тело (я кладу \ г \ п для разрывов строк, как ну, но это не помогло).
--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 ... Я знаю, что это не проблема разрешения, так как я могу успешно создавать модули и темы ссылок, используя очень похожий код. Любые рекомендации очень ценятся.
Спасибо за отзыв. Я попытался добавить -xxBoundaryxx--, чтобы закончить тело POST и поместить элемент Url просто «test.txt», и я все равно получаю тот же 404. Я посмотрел на конкретный пример (много, много раз!), Но я просто похоже, не может заставить его работать. С моего оригинального сообщения я также попробовал третий пример на этой странице (загружая новостной элемент), чтобы вывести Url из картинки, и у меня все еще есть 404. Я только удалил часть изображения и перешел на свой OrgId. Можно ли опубликовать фрагмент кода (предпочтительный вариант java), который позволит просто подготовить экземпляр HttpPost (или эквивалент)? –
Я также попытался опубликовать сообщение [на сайте образцов] (http://samples.valence.desire2learn.com/samples/GettingStartedSample/), но он вернул 400 Неизвестную ошибку. Я подозреваю, что это потому, что нет способа добавить Content-Type: multipart/mixed; border = xxBoundaryxx. –
Спасибо за пример. Я пробовал это дословно для нашего сервера, кроме того, что я изменил папку/content/..., чтобы отразить структуру корневой папки, которую я вижу, когда я нахожусь в разделе «Управление файлами». Я всегда получаю ошибку 404 и не знаю, что не так. Есть ли способ, которым я могу попробовать это на нашем back-end, используя [что-то вроде этого] (http://samples.valence.desire2learn.com/samples/GettingStartedSample)? Каждая неудачная попытка multipart и, к сожалению, я не могу проверить на странице [Начало работы] (http://samples.valence.desire2learn.com/samples/GettingStartedSample) –