2013-05-15 2 views
0

Я пытаюсь создать контент в моем 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 ... Я знаю, что это не проблема разрешения, так как я могу успешно создавать модули и темы ссылок, используя очень похожий код. Любые рекомендации очень ценятся.

ответ

0

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

Я протестировал это действие API на наших тестовых серверах, и он работает (с полностью указанным Url и просто именем файла для Url). Я также обновил документы Valence, чтобы включить concrete example of the course content file topic upload packet: надеюсь, эти две вещи помогут вам.

+0

Спасибо за отзыв. Я попытался добавить -xxBoundaryxx--, чтобы закончить тело POST и поместить элемент Url просто «test.txt», и я все равно получаю тот же 404. Я посмотрел на конкретный пример (много, много раз!), Но я просто похоже, не может заставить его работать. С моего оригинального сообщения я также попробовал третий пример на этой странице (загружая новостной элемент), чтобы вывести Url из картинки, и у меня все еще есть 404. Я только удалил часть изображения и перешел на свой OrgId. Можно ли опубликовать фрагмент кода (предпочтительный вариант java), который позволит просто подготовить экземпляр HttpPost (или эквивалент)? –

+0

Я также попытался опубликовать сообщение [на сайте образцов] (http://samples.valence.desire2learn.com/samples/GettingStartedSample/), но он вернул 400 Неизвестную ошибку. Я подозреваю, что это потому, что нет способа добавить Content-Type: multipart/mixed; border = xxBoundaryxx. –

+0

Спасибо за пример. Я пробовал это дословно для нашего сервера, кроме того, что я изменил папку/content/..., чтобы отразить структуру корневой папки, которую я вижу, когда я нахожусь в разделе «Управление файлами». Я всегда получаю ошибку 404 и не знаю, что не так. Есть ли способ, которым я могу попробовать это на нашем back-end, используя [что-то вроде этого] (http://samples.valence.desire2learn.com/samples/GettingStartedSample)? Каждая неудачная попытка multipart и, к сожалению, я не могу проверить на странице [Начало работы] (http://samples.valence.desire2learn.com/samples/GettingStartedSample) –

Смежные вопросы