2013-05-15 30 views
0

我正在嘗試在我的d2l orgUnit中創建內容,但我一直收到404頁未找到的內容。我從Android模擬器調用這個。我已經成功創建了一個模塊以及使用POST API的主題鏈接。我看過404 Posting Content to Desire2Learn這個帖子,它幫助我獲得了模塊和鏈接的工作,但我無法上傳文件作爲工作主題。我懷疑它可能是URL,因爲我不確定要放什麼,所以我放置了一個在組織單元中創建的相對路徑。文章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()); 

這裏是導致身體(我把\ 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錯誤...我知道這不是權限問題,因爲我可以使用非常相似的代碼成功創建模塊並鏈接主題。任何指導極大的讚賞。

回答

0

幾乎可以肯定您的郵政主體需要一個終止邊界(--xxBoundaryxx--)。對於您發送的JSON塊中的Url屬性:您可以發送不相對的Url(如文檔中的示例);它似乎也可以只發送一個文件名(相對名稱),上傳過程將該文件放入課程內容區域的根目錄中。 (a)如果你沒有絕對URL,它會使用課程的根文件夾作爲路徑的基礎部分,(b)上傳API操作不會爲你創建目錄,但是我並未全面測試Url屬性的處理方式。

我已經在我們的測試服務器上測試了這個API動作,並且它可以工作(具有完全指定的UrlUrl的文件名)。我還更新了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; boundary = xxBoundaryxx標題參數。 –

+0

感謝您的示例。我爲我們的服務器逐字嘗試,除了我更改了/ content/...文件夾以反映我在「管理文件」部分中看到的根文件夾結構。我總是得到404錯誤,不知道什麼是錯的。有什麼辦法可以在我們的後端使用[像這樣的東西](http://samples.valence.desire2learn.com/samples/GettingStartedSample)來試試這個?每個多部分帖子都會失敗,但不幸的是,我無法在[入門頁面](http://samples.valence.desire2learn.com/samples/GettingStartedSample) –

相關問題