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

Office365 Rest API调用get_folder_by_server_relative_url.add()报TypeError错误求助

解决SharePoint文件上传报错TypeError: add()缺少必要位置参数'content'

你的问题是因为office365-python-client库版本更新导致API不兼容:旧版本中files.add()方法支持传入FileCreationInformation对象,但新版本的方法签名已变更,需要直接传入文件名、文件内容等参数。

解决方案1:适配新版本API直接传参

删除FileCreationInformation相关代码,直接调用add()方法并传入所需参数:

# 移除原来的FileCreationInformation代码块
with open(path, 'rb') as content_file:
     file_content = content_file.read()

# 直接调用add方法,传入文件名、内容、覆盖选项
target_folder_obj = context.web.get_folder_by_server_relative_url(target_folder)
result_file = target_folder_obj.files.add(target_file, file_content, overwrite=True)
context.execute_query()

解决方案2:使用更简洁的upload_file方法(推荐)

新版本库提供了更直观的upload_file方法,无需手动构建信息对象:

with open(path, 'rb') as content_file:
     file_content = content_file.read()

target_folder_obj = context.web.get_folder_by_server_relative_url(target_folder)
# 直接上传文件,自动处理覆盖逻辑
result_file = target_folder_obj.upload_file(target_file, file_content).execute_query()

修改后的完整代码示例

import logging
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
import os

###### Logging setup ####################################################
logger = logging.getLogger()
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
#########################################################################

# Site settings that won't change
site_root = '/Sites/SampleSite'
site_url = 'https://REDACTED.sharepoint.com' + site_root

# Specify the file to upload
path = "./SampleFile1.xlsx"
target_folder = "Shared%20Documents/UserFiles"
target_file = "SampleFile1.xlsx"

# SharePoint app-only principal - credentials    
client_id     = 'REDACTED'
client_secret = 'REDACTED'

context_auth = AuthenticationContext(site_url)
if context_auth.acquire_token_for_app(client_id, client_secret):
    context = ClientContext(site_url, context_auth)
    with open(path, 'rb') as content_file:
         file_content = content_file.read()

    target_folder_obj = context.web.get_folder_by_server_relative_url(target_folder)
    # 使用upload_file方法上传
    result_file = target_folder_obj.upload_file(target_file, file_content).execute_query()
    print('File {0} has been uploaded successfully'.format(result_file.properties['ServerRelativeUrl']))
else:
    # No token or error was returned
    logger.critical("Authentication failed")
    try:
        logger.critical(context_auth.get_last_error())
    except:
        logger.critical("Reason for failure is unknown")

额外说明

如果需要固定库版本避免后续自动更新导致的兼容问题,可以指定支持旧写法的版本:

pip install office365-python-client==2.3.10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:13:18