嗯,有很多方法可以从 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 项目中获取您首选语言的客户端库。