如何递归显示所有文件与子文件夹?Alfresco Rest Api目录树获取咨询
刚好之前折腾过类似的需求,来给你详细梳理下解决方案:
一、递归显示所有文件及子文件夹
这个需求分两种场景,命令行快速查看和编程实现,都很简单:
命令行方式
- Linux/macOS:直接敲
ls -R就能递归列出所有内容;如果想要树形结构更清晰,装个tree工具(大部分系统包管理器都能装,比如brew install tree或apt install tree),然后敲tree就行,还能加-L 3参数限制只显示到3层,刚好匹配你的需求。 - Windows:命令提示符里用
dir /s,PowerShell可以用Get-ChildItem -Recurse;想要树形结构的话,部分系统自带tree命令,直接敲tree即可,没有的话可以装第三方工具或者用PowerShell的tree模块。
编程实现(以Python为例)
如果需要自己写逻辑处理,用os.walk就能轻松搞定:
import os def list_files_recursively(root_dir): for root, dirs, files in os.walk(root_dir): # 打印当前文件夹路径 print(f"📂 {root}") # 遍历当前文件夹下的所有文件 for file in files: print(f" 📄 {os.path.join(root, file)}") # 替换成你的目标目录路径 list_files_recursively("/path/to/your/directory")
os.walk会自动递归遍历所有子目录,返回当前目录路径、子目录列表、文件列表,你可以根据需求修改输出格式或者做其他处理。
二、Alfresco Rest API 获取三层嵌套的最深层级文件
Alfresco的Rest API默认确实不会直接返回完整目录树,不过有几种可行的思路:
思路1:递归调用节点子接口遍历层级
这是最直接的实现方式,利用Alfresco的/nodes/{nodeId}/children接口逐层遍历:
- 先拿到目标根文件夹的nodeId(比如公司主页可以直接用别名
companyhome)。 - 第一层:调用
GET /nodes/companyhome/children,过滤出类型为cm:folder的子文件夹,记录它们的nodeId。 - 第二层:遍历第一层的每个文件夹nodeId,调用各自的
children接口,再过滤出子文件夹,记录nodeId。 - 第三层:遍历第二层的每个文件夹nodeId,调用
children接口,这次只收集类型为cm:content的文件(也就是文档),这些就是你要的最深层级文件。
- 注意:接口默认会分页,所以要处理分页参数,比如
?skipCount=0&maxItems=100,如果返回的list.pagination.hasMoreItems为true,就继续请求下一页。 - 可以加
include=properties参数获取文件的名称、路径等详细属性。
思路2:用Search API直接查询
如果不想写递归逻辑,可以用Alfresco的Search API直接定位三层嵌套的文件,效率更高:
比如用CMIS查询语句,直接筛选根文件夹下三层的文档:
SELECT * FROM cmis:document WHERE IN_FOLDER('companyhome') AND PATH LIKE '%/%/%/%'
然后调用POST /search接口,请求体如下:
{ "query": { "cmis": "SELECT * FROM cmis:document WHERE IN_FOLDER('companyhome') AND PATH LIKE '%/%/%/%'" }, "include": ["properties"] }
解释:IN_FOLDER指定根文件夹,PATH LIKE '%/%/%/%'匹配路径中有至少三个斜杠的文件(对应三层子文件夹结构)。如果要更精准匹配Alfresco的路径格式,也可以写成PATH:'/app:company_home//*//*//*'。
思路3:利用新版Alfresco的Graph API
如果你的Alfresco是较新版本(比如6.0+),支持Graph API的话,用Cypher查询会更简洁:
MATCH (root:Node {id: 'companyhome'})-[:CHILD*3]->(file:Document) RETURN file.id, file.name, file.path
这个查询会直接返回根节点下三层的所有文档,省去了手动遍历的麻烦。
小总结
- 如果目录体量不大,递归调用children接口最容易实现;
- 如果目录比较大,用Search API或Graph API效率更高,也更省心。
内容的提问来源于stack exchange,提问作者AME
相关产品推荐
相关产品推荐

