使用Python上传临时XML文件至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
相关产品推荐
相关产品推荐

