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

使用office365-rest-api更新SharePoint列时长文件名触发400错误如何解决

SharePoint长文件名场景下更新元数据400错误解决方案

核心问题原因

  • URL长度限制确实存在

    SharePoint Online REST API 有两层长度限制:
    1. 资源完整相对路径(站点根目录到目标文件的路径)最大长度为400字符
    2. 直接拼接在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:04