使用Office365-REST-Python-Client获取SharePoint文件共享链接报错求助
可能的问题及修复方案
1. 服务器相对URL拼接错误
从错误日志的URL可见,文件路径为/sites/Test_sharepoint12/Shared Documents/Base_documentaire/cross comparison.xlsx,检查你的路径拼接逻辑:
- 确保
file_folder末尾包含斜杠(例如Shared Documents/Base_documentaire/),否则会导致文件名与文件夹名直接拼接,形成无效路径。 - 改用f-string优化拼接代码,提升可读性:
server_relative_url = f'/sites/Test_sharepoint12/{file_folder}{file_name}' target_file = ctx.web.get_file_by_server_relative_url(server_relative_url)
2. 先加载文件对象再调用共享链接方法
先加载文件基础信息,确认文件存在后再创建共享链接:
from office365.sharepoint.sharing.sharing_link_kind import SharingLinkKind ctx = ClientContext(url_shrpt, ctx_auth) server_relative_url = f'/sites/Test_sharepoint12/{file_folder}{file_name}' target_file = ctx.web.get_file_by_server_relative_url(server_relative_url) # 加载文件对象,验证文件存在 ctx.load(target_file) ctx.execute_query() # 创建匿名查看链接 result = target_file.share_link(SharingLinkKind.AnonymousView).execute_query() link_url = result.value.sharingLinkInfo.Url print(link_url)
3. 检查站点共享权限设置
若站点未开启匿名共享权限,调用SharingLinkKind.AnonymousView会触发错误:
- 登录SharePoint站点,进入站点设置 > 站点权限 > 站点共享设置
- 确认允许创建匿名访问的共享链接(需站点管理员权限操作)
4. 改用文件夹+文件的方式获取文件对象
若直接通过服务器相对URL获取文件失败,尝试先获取文件夹,再从中定位文件:
folder = ctx.web.get_folder_by_server_relative_url(f'/sites/Test_sharepoint12/{file_folder}') target_file = folder.files.get_by_name(file_name) ctx.load(target_file) ctx.execute_query() result = target_file.share_link(SharingLinkKind.AnonymousView).execute_query() link_url = result.value.sharingLinkInfo.Url print(link_url)
5. 替代方案:通过ListItem创建共享链接
如果以上方法均无效,尝试通过文件对应的ListItem生成共享链接:
server_relative_url = f'/sites/Test_sharepoint12/{file_folder}{file_name}' target_file = ctx.web.get_file_by_server_relative_url(server_relative_url) list_item = target_file.listItemAllFields ctx.load(list_item) ctx.execute_query() result = list_item.share_link(SharingLinkKind.AnonymousView).execute_query() link_url = result.value.sharingLinkInfo.Url print(link_url)
内容的提问来源于stack exchange,提问作者user22228371
相关产品推荐
相关产品推荐

