技术开发 频道

IBM Lotus Quickr REST服务简介


上载文件

    现在假设您希望从库(或文件夹)的上下文菜单中选择 Upload,从而将本地文件存储在 Lotus Quickr 中。这需要使用树节点的 TreeParent 实例中存储的 feed URL:

http://quickr.acme.com/dm/atom/library/5d06ab0044ed8129bd5ebd4caeec5df1/feed

    在前面,通过向这个 URL 发送 GET 请求来检索库的内容。现在,通过向这个 URL 发送 POST 请求来存储文档。这个请求是由 APP 规范定义的,它使用 POST 操作创建资源。在发送 POST 请求时,把文档的媒体内容写在请求内容中。但是,服务器如何知道把文件保存在库中的什么地方以及使用哪个文件名?

    答案就是 Slug 头,可以通过 Slug 头向 Lotus Quickr 建议采用哪个名称作为文档的文件名。将 Slug 头的值设置为文档相对于库根的相对路径。例如,如果希望将文件 MyFile.doc 存储在库中的 MyFolder 文件夹中,那么应该将 Slug 头设置为 /MyFolder/MyFile.doc。清单 6 给出了在插件中执行这个操作的代码。

清单 6. 在文档库中存储本地文件的代码

public void doUpload(String url) { FileDialog dlg = new FileDialog(getViewSite().getShell(), SWT.OPEN); String path = dlg.open(); if (path != null) { File file = new File(path); RequestOptions options = new RequestOptions(); options.setSlug(file.getName()); options.setContentType("unknown/unkown"); options.setHeader("Content-Length", String.valueOf(file.length())); try { ClientResponse response = httpClient.post(url, new FileInputStream(file), options); if (response.getStatus() != 201) { showMessage(response.getStatusText()); } else { ISelection selection = viewer.getSelection(); TreeParent parent = (TreeParent) ((IStructuredSelection) selection) .getFirstElement(); parent.clear(); viewer.refresh(parent); } response.release(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }

    在成功地处理这个请求之后,服务在响应中返回状态码 201。响应还包含一个 Location 头,其中包含刚创建的文档内容的 URL(即 edit-media 链接)。可以使用这一信息更新树,以显示新的文档节点。为了简化,这个插件会刷新父节点来显示新添加的文档。最终,文件会添加到库中并显示在树中。

删除文档

    现在,看看如何使用这个插件从库中删除文档。这需要使用库节点下面每个节点中存储的 self 链接。Quickr REST 服务不支持删除库本身,所以我们不在库节点上提供 Delete 菜单(见清单 7)。

清单 7. 删除文档的代码

public void doDelete(String url) { String entryUrl = url; if (url.endsWith("/media")) { entryUrl = entryUrl.substring(0, url.lastIndexOf('/')); entryUrl += "/entry"; } TreeObject item = (TreeObject) ((IStructuredSelection) viewer .getSelection()).getFirstElement(); TreeParent parent = item.getParent(); RequestOptions options = new RequestOptions(); options.setHeader("X-Method-Override", "DELETE"); ClientResponse response = httpClient.post(entryUrl, new StringRequestEntity(""), options); if (response.getStatus() == 200) { parent.clear(); viewer.refresh(parent); } }

    最后,简要介绍一下其他菜单。Refresh 操作的作用是获取库或文件夹的内容。Download 操作是 Doubleclick 操作的一部分,Doubleclick 操作会下载并运行文件。

结束语

    Lotus Quickr REST 服务提供了一种操作文档的简便方法。因为操作是通过 REST 样式的 URL 定义的,所以您可以使用自己喜欢的编程语言(这个示例中使用 Java)。本文演示了如何使用这些服务执行基本的文档操作,并解释了每种操作的 URL 请求和响应。

0
相关文章