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

如何通过Office365-REST-Python-Client上传文件到SharePoint指定子文件夹

问题根因

报错源于参数层级传错:Documents是SharePoint站点下的独立文档库(对应List对象),Folder1是该文档库根目录下的子文件夹,不属于独立列表。直接修改list_title变量为子文件夹路径是完全错误的传参逻辑,将Documents/Folder1作为列表名传入get_by_title()方法,接口无法匹配到对应列表,自然返回404错误。

实现方案

保持列表名为Documents不变,先拿到Documents文档库的根文件夹对象,再定位到目标子文件夹,最后在子文件夹对象上执行上传操作即可。

修正后的代码:

import os

from office365.sharepoint.client_context import ClientContext
from tests import test_user_credentials, test_team_site_url

ctx = ClientContext(test_team_site_url).with_credentials(test_user_credentials)

path = "test_file.txt"
with open(path, 'rb') as content_file:
    file_content = content_file.read()

list_title = "Documents"
# 获取Documents文档库根文件夹
doc_lib_root = ctx.web.lists.get_by_title(list_title).root_folder
# 定位根目录下的Folder1子文件夹,多层嵌套直接传完整相对路径即可,例如"Folder1/202406/Reports"
target_folder = doc_lib_root.folders.get_by_url("Folder1")
name = os.path.basename(path)
target_file = target_folder.upload_file(name, file_content).execute_query()
print("文件上传完成,访问地址:{0}".format(target_file.serverRelativeUrl))

注意事项

  • 若目标子文件夹不存在,无需手动逐层判断创建,可直接调用ensure_folder_path()方法,接口会自动创建路径中所有缺失的文件夹层级:
# 注意默认Documents文档库的服务器端路径通常为Shared Documents,直接传入完整目标路径即可
target_folder = ctx.web.ensure_folder_path("Shared Documents/Folder1").execute_query()
  • 嵌套多层的子文件夹路径(例如Documents/业务部/项目A/交付文档),直接将完整相对路径传入get_by_url()或ensure_folder_path()即可,无需逐层遍历文件夹对象。
  • 注意区分文档库显示名和服务器实际路径:部分站点文档库显示名为Documents,但服务器端实际路径名是Shared Documents,若传路径后仍报404,可先在SharePoint网页端进入对应文档库,从地址栏确认实际路径名。

内容的提问来源于stack exchange,提问作者AK91

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:33:34