使用Microsoft Graph API Java实现SharePoint文件搜索复制时遭遇itemNotFound错误
我仔细看了你的代码,发现问题出在源文件的访问路径上!你现在用graphClient.me().drive().items(fileResult.id)来访问要复制的文件,但这个文件实际在其他用户的驱动器里,me()对应的是当前认证用户的驱动器,自然找不到属于其他驱动器的item ID,这就是itemNotFound错误的核心原因。
问题分析
每个Drive的Item ID是独立的,不同Drive之间的ID不通用。你通过搜索拿到的fileResult是其他用户Drive里的文件,必须用这个文件所在的Drive ID来构建请求,而不是当前用户的Drive。
解决方案
修改复制文件的代码部分,用fileResult的driveId来定位源文件:
- 先确保搜索返回的
DriveItem包含driveId属性:如果搜索结果里没有这个字段,需要在搜索请求中添加字段选择,比如给requests.fields赋值为"id,driveId,name",确保拿到Drive ID。 - 把原来的复制请求从
graphClient.me().drive().items(...)改成graphClient.drives(fileResult.driveId).items(...)。
修改后的核心代码片段:
if (fileResult != null && fileResult.driveId != null) { // 使用文件所在的Drive ID访问源文件 graphClient.drives(fileResult.driveId).items(fileResult.id).copy( DriveItemCopyParameterSet .newBuilder() .withName(fileName) .withParentReference(parentReference) .build()) .buildRequest() .post(); }
额外检查点
- 确认目标路径对应的文件夹确实存在:如果
destinationPath指向的文件夹还没创建,destination.buildRequest().get()会抛出错误,建议先判断文件夹是否存在,不存在的话先调用创建接口。 - 验证权限:虽然你说用户有全局访问权限,可以再确认一下该用户对源文件所在的Drive有读取和复制权限(不过大概率权限没问题,主要还是路径的问题)。
这样修改后,应该就能正确定位到源文件,解决itemNotFound的错误了。
备注:内容来源于stack exchange,提问作者rread
相关产品推荐
相关产品推荐

