0

我正在尝试在我的 d2l orgUnit 中创建内容,但我不断收到 404 Page not found 。我从 Android 模拟器调用它。我已经使用 POST API 成功创建了一个模块和一个主题链接。我确实看过这篇文章404 Posting Content to Desire2Learn,它帮助我使模块和链接正常工作,但我只是无法将上传文件作为主题工作。我怀疑它可能是 URL,因为我不确定要放什么,所以我放了一个我在组织单元中创建的相对路径。帖子404 Posting Content to Desire2Learn提到使用“在组织单位的现有内容空间内的有效位置 URL”。我还尝试将 /content/enforced/... 文件夹作为 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 错误...我知道这不是权限问题,因为我可以使用非常相似的代码成功创建模块和链接主题。非常感谢任何指导。

4

1 回答 1

0

--xxBoundaryxx--您几乎可以肯定在您的 POST 正文 ( )上需要一个终止边界。对于Url您发送的 JSON 块中的属性:您可以发送一个不相关的 Url(如文档中的示例);似乎您也可以只发送一个文件名(相对名称),然后上传过程将文件放在课程内容区域的根目录中。我完全希望(a)如果您没有绝对 URL,它将使用课程的根文件夹作为路径的基本部分,并且(b)上传 API 操作不会为您创建目录,但我还没有关于如何Url处理财产的全面测试。

我已经在我们的测试服务器上测试了这个 API 操作,它可以工作(使用完全指定Url的文件名,只是Url. 我还更新了 Valence 文档以包含课程内容文件主题上传数据包的具体示例:希望这两件事对您有所帮助。

于 2013-05-15T16:23:02.270 回答