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

使用Office365-REST-Python-Client移动SharePoint文件失败,求参数格式

SharePoint文件移动问题(Python + Office365-REST-Python-Client)

环境:Python 3.10,Office365-REST-Python-Client==2.4.1

尝试编写代码移动SharePoint文件,代码如下:

def get_file(ctx: ClientContext, name: str) -> File:
    result = None
    try:
        file: File = ctx.web.get_file_by_server_relative_url(name)
        ctx.load(file)
        ctx.execute_query()
        result = file

    except ClientRequestException as e:
        print(e)
    finally:
        return result

file_from: File = get_file(ctx, file_to_move)
file_from.moveto(folder_to, True)
ctx.execute_query()

已确认文件有效且获取到唯一ID,已知File.moveto方法调用签名要求第一个参数为{"newurl": new_relative_url,"flags": flag},尝试三种路径参数均触发错误:

  • 目标目录路径:Documents/.../inventory/error(目录已存在)
  • 带文件名的路径:Documents/.../inventory/error/name(希望重命名为name)
  • 包含sites前缀的路径:sites/...Documents/.../inventory/error/name

错误信息:

('-1, Microsoft.SharePoint.Client.InvalidClientQueryException', 'Input string was not in a correct format.', "400 Client Error:

请问File.moveto方法的第一个参数和第二个参数应采用何种正确格式?


正确参数格式说明

第一个参数要求

必须传入字典格式,键为newUrl(注意SDK要求驼峰命名),值为包含完整文件名的服务器相对URL:

  • URL需以站点为基准,开头带斜杠,格式示例:/sites/你的站点名称/Documents/目标目录/目标文件名.ext
  • 无论是否需要重命名,都必须包含文件名,不能只传目录路径
  • 不能省略开头的斜杠,否则会被视为相对当前文件的路径,触发格式错误

第二个参数要求

不能传入布尔值,必须使用MoveOperations枚举值(需提前导入),常用枚举值:

  • MoveOperations.Overwrite:覆盖目标位置的同名文件
  • MoveOperations.AllowBrokenThickets:允许移动包含文档集或关联文件的内容
  • 可通过位或|组合多个枚举值

修正后的代码示例

from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File
from office365.runtime.client_request_exception import ClientRequestException
from office365.sharepoint.files.move_operations import MoveOperations

def get_file(ctx: ClientContext, name: str) -> File:
    result = None
    try:
        file: File = ctx.web.get_file_by_server_relative_url(name)
        ctx.load(file)
        ctx.execute_query()
        result = file

    except ClientRequestException as e:
        print(e)
    finally:
        return result

# 示例:源文件路径(服务器相对URL)
file_to_move = "/sites/你的站点名/Documents/源目录/原文件名.ext"
# 示例:目标完整路径(服务器相对URL,包含新文件名)
target_full_url = "/sites/你的站点名/Documents/.../inventory/error/新文件名.ext"

file_from: File = get_file(ctx, file_to_move)
# 调用moveto,传入字典和枚举值
file_from.moveto({"newUrl": target_full_url}, MoveOperations.Overwrite)
ctx.execute_query()

注意事项

  • 确保目标目录已存在,否则会报错
  • 服务器相对URL的站点名称、文档库名称(比如Documents)必须和实际环境一致
  • 若不需要重命名,目标文件名需和源文件名保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:23:38