gpt4 book ai didi

python - 使用 Python 上传到 Sharepoint 后 Excel 文件损坏

转载 作者:太空狗 更新时间:2023-10-30 01:34:08 25 4
gpt4 key购买 nike

我正在尝试使用 Python 中的请求模块将 Excel 文件从本地文件夹上传到 Sharepoint。该文件将出现在我的共享文档文件夹中,这是我想要的位置,但是当我尝试打开该文件时,我收到一条消息,提示“无法打开您选择的工作簿。该工作簿可能位于不支持的文件格式,或者它可能已损坏。您想尝试在 Excel 中打开此文件吗?”

我研究过这个问题,我发现的许多论坛都说一个常见的问题是文件中某处的 ^ 符号前有一个空格,但目前,出于测试目的,我只是试图上传一个完全空白的文件,里面什么也没有。

这是我的代码:

files = {'file': ('Test.xlsx', open('Test.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
myFile = requests.put('http://linkToMySharepoint/Test.xlsx', files=files, auth=auth)

我做错了什么?任何帮助或见解将不胜感激!

最佳答案

问题:问题是 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”

这是我发送的二进制文件

fcvsdcvsd

url 变量是您的 Sharepoint 服务器网关所在的 url(?)。location 变量是您要添加新文件的路径"X-RequestDigest": token 是一个可选参数,如果您有权访问您的 Sharepoint 服务器。

关于python - 使用 Python 上传到 Sharepoint 后 Excel 文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24145451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com