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

使用Python上传临时XML文件至SharePoint失败,请求协助

SharePoint文件上传失败排查与修复方案

核心问题排查与修复步骤:

  • 文件名参数错误
    SharePoint REST API的Files/add(url='xxx')中,url参数需要的是上传后在SharePoint中的文件名,而非本地文件的完整路径。你当前传入的是本地临时文件的绝对路径(如/tmp/xxx/XML_REPORT_xxxx.xml),这会导致SharePoint尝试创建含路径分隔符的无效文件名,或上传失败但未触发代码异常。
    修复:提取本地文件的文件名传入API:

    filename = os.path.basename(temp_file)
    response = session.post( 
        url=f"{base_path}/sites/{site_name}/_api/web/GetFolderByServerRelativeUrl('{doc_library}')/Files/add(url='{filename}',overwrite=true)",
        data=content_file
    )
    
  • 未验证请求响应状态
    代码仅捕获网络类异常,但HTTP错误(如403权限不足、404路径不存在)不会触发Exception,导致你误以为上传成功。必须主动检查响应状态和内容:
    修复:在请求后添加验证逻辑:

    response = session.post(...)
    print(f"响应状态码: {response.status_code}")
    print(f"响应内容: {response.text}")
    if response.status_code not in [200, 201]:
        raise Exception(f"上传失败,状态码: {response.status_code},详情: {response.text}")
    
  • 文档库路径校验
    从你提供的SharePoint地址来看,General文件夹的服务器相对URL应为/sites/Testing/Shared Documents/General,而非Shared%20Documents/General(缺少站点前缀)。修改路径定义:

    doc_library = "/sites/Testing/Shared Documents/General"
    
  • 认证方式适配现代SharePoint
    传统用户名密码获取Cookie的方式在启用MFA或Azure AD身份验证的环境中可能失效,即使获取Cookie也无实际权限。建议使用Office365-REST-Python-Client库的现代认证流程:

    from office365.sharepoint.client_context import ClientContext
    from office365.runtime.auth.user_credential import UserCredential
    
    ctx = ClientContext(f"{base_path}/sites/{site_name}").with_credentials(UserCredential("test@xyz.com", "abc123"))
    target_folder = ctx.web.get_folder_by_server_relative_url(doc_library)
    filename = os.path.basename(temp_file)
    with open(temp_file, 'rb') as content_file:
        file_content = content_file.read()
        target_folder.upload_file(filename, file_content).execute_query()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:20:29