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

使用Python上传文件至SharePoint文档库遇TypeError问题求协助

使用Office365 REST Python Client上传文件到SharePoint时的TypeError解决方法

错误原因分析

你遇到的TypeError: stat: path should be string, bytes, os.PathLike or integer, not BufferedReader,核心问题是**create_upload_session方法的第一个参数需要传入文件路径字符串,而非打开的文件对象**。

查看file_collection.py的源码可知,create_upload_session会调用os.path.getsize(source_path)获取文件大小,而这个方法仅接受路径类参数,无法处理文件流对象。你之前的代码错误传入了open返回的BufferedReader对象,因此触发报错。

修正后的代码

import os

from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.client_credential import ClientCredential

CLIENT_ID = "my-client-id"
CLIENT_SECRET = "my-secret"

# 创建ClientCredential对象
client_credential = ClientCredential(CLIENT_ID, CLIENT_SECRET)

# 创建SharePoint站点的ClientContext对象
ctx = ClientContext("https://MySharePointURL.sharepoint.com").with_credentials(client_credential)

target_url = "/sites/mor_data_work/mor_data_work_doc_lib"
target_folder = ctx.web.get_folder_by_server_relative_url(target_url)
size_chunk = 1000000
file_name = "some_file_name.csv"  # 确保此变量已正确定义
local_path = os.path.abspath(file_name)

def print_upload_progress(offset):
    file_size = os.path.getsize(local_path)
    print("Uploaded '{0}' bytes from '{1}'...[{2}%]".format(offset, file_size, round(offset / file_size * 100, 2)))

# 直接传入文件路径,无需手动打开文件
uploaded_file = target_folder.files.create_upload_session(local_path, size_chunk, print_upload_progress).execute_query()

print('File {0} has been uploaded successfully'.format(uploaded_file.serverRelativeUrl))

其他潜在问题检查点

  • 文件路径有效性:确认file_name指向的文件真实存在,os.path.abspath(file_name)能正确解析到本地文件的绝对路径,避免出现文件找不到的错误。
  • SharePoint目标路径正确性:验证target_url是正确的服务器相对路径(格式通常为/sites/站点名/文档库名),确保get_folder_by_server_relative_url能定位到目标文档库文件夹。
  • 权限验证:检查Client ID和Client Secret是否拥有目标文档库的写入权限,权限不足会导致后续出现403/401类权限错误。
  • 分片大小设置:1MB的分片大小是合理值,若上传超大文件(如10GB以上),可适当调大分片大小提升效率,但不要超过SharePoint允许的单分片上限(通常为60MB)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:40:09