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

使用Microsoft Graph API Java实现SharePoint文件搜索复制时遭遇itemNotFound错误

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来定位源文件:

  1. 先确保搜索返回的DriveItem包含driveId属性:如果搜索结果里没有这个字段,需要在搜索请求中添加字段选择,比如给requests.fields赋值为"id,driveId,name",确保拿到Drive ID。
  2. 把原来的复制请求从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:24:28