使用REST API与CURL向SharePoint Online上传本地文件遇阻求助
你当前的命令只手动设置了Content-Length,但没有把本地文件的内容作为请求体传递给API,这就是上传失败的核心原因。SharePoint服务器接收到请求后找不到文件数据,自然无法创建对应文件。
正确的curl上传命令
使用--data-binary参数让curl读取本地文件内容并作为请求主体发送,无需手动设置Content-Length(curl会自动计算并添加正确的请求头):
curl -X POST -i -H "Authorization: Bearer tokenabc" --data-binary "@/tmp/a.txt" "https://tenant.sharepoint.com/teams/testSite/_api/web/GetFolderByServerRelativeUrl('Shared Documents')/Files/add(url='a.txt',overwrite=true)"
如果你已经进入/tmp目录,可以简化路径:
curl -X POST -i -H "Authorization: Bearer tokenabc" --data-binary "@a.txt" "https://tenant.sharepoint.com/teams/testSite/_api/web/GetFolderByServerRelativeUrl('Shared Documents')/Files/add(url='a.txt',overwrite=true)"
关键说明
--data-binary "@文件路径"是上传本地文件内容的核心,它会完整读取文件的二进制数据并发送给服务器。- 不要手动指定
Content-Length,如果手动设置的数值和文件实际大小不匹配,会导致服务器解析请求失败。 - URL中的
%20Shared%20Documents可以直接写成'Shared Documents',curl会自动处理URL编码,提升命令可读性。
额外注意事项
- 确保你的Bearer token拥有目标文档库(Shared Documents)的编辑权限,否则会返回权限错误。
- 如果上传大文件(超过几MB),建议使用SharePoint的分片上传API,但针对小文件,上述命令完全适用。
内容的提问来源于stack exchange,提问作者Lance Stern
相关产品推荐
相关产品推荐

