使用office365-rest-api更新SharePoint列时长文件名触发400错误如何解决
核心问题原因
URL长度限制确实存在
SharePoint Online REST API 有两层长度限制:- 资源完整相对路径(站点根目录到目标文件的路径)最大长度为400字符
- 直接拼接在URL路径中的参数总长度不能超过260字符,超出就会返回400 Bad Request错误
为什么上传正常、仅更新元数据报错
- 上传文件时,
upload_file方法的请求URL仅指向目标文件夹的REST端点,长文件名是放在请求体中传递,不会拼入URL,因此不会触发长度限制 - 你当前更新元数据的逻辑中,SDK会自动将完整文件路径(包含180字符长文件名)拼入
listItemAllFields对应的请求URL,加上站点前缀、REST API固定路径后总长度超出限制,因此报错
- 上传文件时,
修复方案
将按文件路径请求列表项的逻辑,改为按文件ID请求,完全避免长文件名拼入URL,修改后代码如下:
from office365.runtime.auth.user_credential import UserCredential from office365.sharepoint.client_context import ClientContext from office365.sharepoint.files.file_system_object_type import FileSystemObjectType from office365.sharepoint.files.file_creation_information import FileCreationInformation targetFolderUrl = ctx.web.ensure_folder_path(SP_Location).execute_query() targetFile = targetFolderUrl.upload_file(fileName, fileContent) ctx.execute_query() # 新增:加载文件关联的列表ID、列表项ID,不走路径请求 ctx.load(targetFile, ["Id", "ListId"]) ctx.execute_query() # 直接通过ID获取列表项,避免长文件名拼接 target_list = ctx.web.lists.get_by_id(targetFile.properties["ListId"]) list_item = target_list.get_item_by_id(targetFile.properties["Id"]) list_item.set_property('COMMITTEE','SM_Team') list_item.update() ctx.execute_query()
额外注意项
- SharePoint 单文件名(含后缀)最大长度为255字符,建议上传前先做校验
- 站点根目录到文件的完整相对路径最大长度为400字符,超出的话即使按ID更新也会出现其他功能异常
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

