问题:
问题是 Sharepoint 需要您请求中的二进制数据。但是您正在发送某种批次的数据。当你发出请求时,python-requests 库会自动添加到 header
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryNTIFeyYj307EY4HV
例如,尝试发送带有“fcvsdcvsd”文本的 .txt 文件。当您将此文件上传到您的 Sharepoint 站点时,您将收到不同的文件。这是我上传该文件时在 Sharepoint 文件存储库中得到的:
------WebKitFormBoundaryCGYE31vAG1tfvbzV
Content-Disposition: form-data; name="fileUpload1"; filename="testtest.txt"
Content-Type: text/plain
fcvsdcvsd
------WebKitFormBoundaryCGYE31vAG1tfvbzV--
在您的情况下,这些行也添加到您的文件中。当 Excel 尝试打开该文件时,它会找到这些行并停止读取,因为文件已损坏。
解决方案:
正如我之前所说,您需要在请求正文中将文件作为二进制文件发送。这是我的做法
headers = {"accept": "application/json;odata=verbose",
"X-RequestDigest": token,
"content-type": "application/x-www-urlencoded; charset=UTF-8"}
with open(local_path, "rb") as read_file:
content = read_file.read()
r = requests.post(url + "getFolderByServerRelativeUrl('" + location + "')/files/add(overwrite=true,url='" + filename + "')",
data=content, auth=auth, headers=headers)
如您所见,我在请求正文(“数据参数”)中将文件作为二进制(“内容”)发送,内容类型定义为“application/x-www-urlencoded; charset=UTF-8”
这是我以二进制形式发送的 txt 文件
fcvsdcvsd
url 变量是您的 Sharepoint 服务器网关所在的 URL(?)。
location 变量是您要添加新文件的路径
"X-RequestDigest": token 是一个可选参数,如果您有权访问您的 Sharepoint 服务器。