如何通过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
相关产品推荐
相关产品推荐

