You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将文件上传至Alfresco指定文件夹?

解决Alfresco指定文件夹上传文件的问题

你当前的代码能成功上传到站点的documentLibrary根目录,要上传到指定子文件夹,需要调整请求参数,以下是两种可行方案:

方案1:使用文件夹的NodeRef(精准定位)

Alfresco的上传API支持通过destination参数指定目标文件夹的完整NodeRef(而非单独的nodeid),步骤如下:

  1. 获取目标文件夹的NodeRef:在Alfresco web界面进入该文件夹,地址栏会包含类似workspace://SpacesStore/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx的字符串,这就是文件夹的NodeRef。
  2. 修改请求的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:12:47