0

我们计划将 Alfresco 内的大量文件夹(站点)放入本地磁盘。我经历了很多类似的问题和教程,但似乎无法理解如何使用 REST API 启动下载。这是我第一次使用这个,我可以逐步了解如何解决这个问题吗?

4

1 回答 1

2

那么有很多方法可以从 Alfresco 下载内容。如果您还没有,我建议您查看http://api-explorer.alfresco.com以了解 REST API。

如果您知道其节点引用,则可以在 Alfresco 中下载任何对象。例如,假设我有一个名为 test-0.txt 的文件,它的节点引用如下:

workspace://SpacesStore/0e61aa25-d181-4465-bef4-783932582636

我可以使用 REST API 来下载它,如下所示:

http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/0e61aa25-d181-4465-bef4-783932582636/content

因此,一种策略是遍历要导出的节点,然后调用该 URL 来下载它们。

从 Alfresco 5.2.1 开始,Alfresco 添加了一个名为downloads的新端点。有了它,您可以请求包含任意数量的节点引用的下载。所以,如果我有以下文件:

test-0.txt: workspace://SpacesStore/0e61aa25-d181-4465-bef4-783932582636
test-1.txt: workspace://SpacesStore/6bdac77f-8499-4be3-9228-9aabf80ba3e3
test-2.txt: workspace://SpacesStore/a6861c8f-8444-4bce-87a2-191c56b6ec7c
test-3.txt: workspace://SpacesStore/118121e9-bd92-4dec-9de7-062e374e5fb5

我可以要求 Alfresco 创建一个包含所有四个文件的下载对象(实际内容将是 ZIP 格式),如下所示:

curl --location --request POST 'http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/downloads' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic YWRtaW46YWRtaW4=' \
--data-raw '{
    "nodeIds":
     [
        "0e61aa25-d181-4465-bef4-783932582636",
        "6bdac77f-8499-4be3-9228-9aabf80ba3e3",
        "a6861c8f-8444-4bce-87a2-191c56b6ec7c",
        "118121e9-bd92-4dec-9de7-062e374e5fb5"
     ]
}'

Alfresco 会做出如下回应:

{
    "entry": {
        "filesAdded": 0,
        "bytesAdded": 0,
        "totalBytes": 0,
        "id": "91456d9a-ed9e-493a-9efa-a1e49fbb578b",
        "totalFiles": 0,
        "status": "PENDING"
    }
}

请注意 PENDING 的状态。它正在异步构建我们要求的 ZIP。您可以通过对下载对象执行 GET 来检查它,例如:

http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/downloads/91456d9a-ed9e-493a-9efa-a1e49fbb578b

一旦响应返回 DONE,您就可以下载为您准备的 ZIP Alfresco。还记得本文开头的节点端点吗?它也在这里工作。只需使用下载 ID 代替节点引用,例如:

curl --location --request GET 'http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/91456d9a-ed9e-493a-9efa-a1e49fbb578b/content' --header 'Authorization: Basic YWRtaW46YWRtaW4='

因此,与其单独下载您尝试导出的每个对象,不如将它们批量化并下载多个压缩为 ZIP 的对象。

如果您不想直接使用 REST,您也可以考虑使用 CMIS。您可以在Apache Chemistry项目中获取您首选语言的客户端库。

于 2020-02-07T21:13:27.477 回答