如何将文件上传至Alfresco指定文件夹?
解决Alfresco指定文件夹上传文件的问题
你当前的代码能成功上传到站点的documentLibrary根目录,要上传到指定子文件夹,需要调整请求参数,以下是两种可行方案:
方案1:使用文件夹的NodeRef(精准定位)
Alfresco的上传API支持通过destination参数指定目标文件夹的完整NodeRef(而非单独的nodeid),步骤如下:
- 获取目标文件夹的NodeRef:在Alfresco web界面进入该文件夹,地址栏会包含类似
workspace://SpacesStore/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx的字符串,这就是文件夹的NodeRef。 - 修改请求的
data参数,添加destination字段:
import json import requests url = "http://localhost:8080/alfresco/service/api/upload" auth = ("admin", "admin") files = {"filedata": open("/tmp/foo.txt", "rb")} # 替换为你实际的文件夹NodeRef data = { "destination": "workspace://SpacesStore/abc123xyz456789" } r = requests.post(url, files=files, data=data, auth=auth) print(r.status_code) print(json.loads(r.text))
方案2:使用站点内的相对路径(更直观)
如果目标文件夹在站点的documentLibrary下,可通过folderPath参数指定相对于documentLibrary的路径,无需获取NodeRef:
- 比如要上传到
test站点documentLibrary下的项目文档/月度报告文件夹,folderPath设为/项目文档/月度报告 - 需保留
siteid和containerid参数,确保定位到站点的文档库
修改后的代码示例:
import json import requests url = "http://localhost:8080/alfresco/service/api/upload" auth = ("admin", "admin") files = {"filedata": open("/tmp/foo.txt", "rb")} data = { "siteid": "test", "containerid": "documentLibrary", # 相对于documentLibrary的子文件夹路径,开头需加/ "folderPath": "/项目文档/月度报告" } r = requests.post(url, files=files, data=data, auth=auth) print(r.status_code) print(json.loads(r.text))
你之前用nodeid失败的原因
这个上传API的参数名不是nodeid,而是destination,且需要传入完整的NodeRef字符串(包含workspace://SpacesStore/前缀),仅传node的ID部分会导致API无法识别目标位置。
额外注意事项
- 确保目标文件夹已存在,否则API会返回错误
- 验证当前用户对目标文件夹有写入权限
folderPath的路径分隔符用/,且必须以/开头
内容的提问来源于stack exchange,提问作者Glenn Edvardsen
相关产品推荐
相关产品推荐

