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

如何使用Python库(非系统调用)上传文件至SharePoint?

解决Python Requests上传SharePoint文件返回200但失败的问题

我之前也碰到过一模一样的问题!核心问题在于你用错了请求方式和参数格式——curl的-T参数本质是发送PUT请求把文件直接推送到目标路径,而你用requests的post+files是在模拟HTML表单上传,这和SharePoint文档库期望的上传方式不匹配。

为什么你的curl能成功?

你的curl命令curl -T testcron.log http://mysharepoint.com/docshare/path/to/the/folder/ --ntlm -u 'user:password',其实是把testcron.log的内容作为请求体,发送PUT请求到http://mysharepoint.com/docshare/path/to/the/folder/testcron.log(curl会自动把文件名追加到文件夹URL后面),这正好符合SharePoint文档库的文件上传协议。

正确的Requests实现方式

你需要改用PUT请求,并且直接把文件内容作为请求体发送,目标URL要明确包含文件名,而不是只到文件夹:

import requests
from requests_ntlm import HttpNtlmAuth

# 注意:URL要加上文件名,不是只到文件夹
upload_url = 'http://mysharepoint.com/docshare/path/to/the/folder/testcron.log'
session = requests.Session()
session.auth = HttpNtlmAuth('user', 'password')

# 直接读取文件内容作为请求体发送PUT请求
with open('testcron.log', 'rb') as f:
    response = session.put(upload_url, data=f)

# 检查响应状态码,201或者200都可能表示成功(取决于SharePoint版本)
print(f"响应状态码: {response.status_code}")
print(f"响应内容: {response.text}")

额外排查点

  • 如果还是失败,检查是否需要设置Content-Type头,比如针对日志文件可以加headers={'Content-Type': 'text/plain'}
  • 确认你的账号有目标文件夹的写入权限
  • 如果你使用的是较新的SharePoint Online,可能需要改用Microsoft Graph API,但你的场景是NTLM认证的本地/旧版SharePoint,上面的方法应该适用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:12:35