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

调用Google Drive API复制文件时提示File Not Found问题求助

解决Google Drive File API复制文件返回"Not Found"的问题

我来帮你拆解下这个问题的可能原因和对应的解决思路:

1. 确认复制目标的父文件夹权限与参数

你提到直接在API参考页调用能成功,很可能的差异点在于父文件夹的指定:

  • 当你在参考页调用时,系统可能默认将复制后的文件放到你的个人Drive根目录,但你自己的代码里如果没有明确指定parents参数,或者指定的文件夹ID无效/无写入权限,就会触发"Not Found"错误。
  • 解决办法:在copy请求的请求体里明确添加目标文件夹ID,比如在PHP客户端中:
    $copyFile = new Google_Service_Drive_DriveFile();
    // 替换成你有写入权限的文件夹ID
    $copyFile->setParents(["your-target-folder-id"]);
    

2. 检查API参数的正确性(区分v2/v3版本)

  • 对于Drive API v3,supportsTeamDrives已经被废弃,只需要保留supportsAllDrives=true即可,多余的参数可能导致请求异常。
  • 确保这些参数是作为查询参数传递的,而不是放到请求体中。在PHP客户端里调用copy方法时,要把参数放在第三个参数的数组里:
    $params = [
        'supportsAllDrives' => true
    ];
    $service->files->copy('1GWBfT2gApqaeZ2JRjmNID0BlEs_okMg9', $copyFile, $params);
    

3. 验证Access Token的权限与有效性

虽然你配置了多个作用域,但要确认当前使用的token确实包含所需权限:

  • 检查token是否包含drive.file或drive作用域(这两个权限都支持文件复制操作)。
  • 如果使用的是服务账号,要确保:
    • 服务账号已经获得原文件所在共享盘的授权(比如共享盘管理员把服务账号添加为成员并赋予编辑权限)。
    • 已启用域范围委派(如果是针对企业域内的文件)。

4. 排查convert参数的影响

  • 在v3版本中,convert=true参数的行为有变化,如果你需要转换文件格式,建议直接指定目标MIME类型,比如要转成Google Sheets:
    $copyFile->setMimeType('application/vnd.google-apps.spreadsheet');
    
    去掉convert参数,避免参数冲突。

5. 对比请求细节找差异

打开浏览器开发者工具,查看API参考页调用成功时的完整请求(包括请求方法、请求体、查询参数、请求头),和你代码中发送的请求做对比:

  • 重点看是否缺少parents参数、查询参数是否正确、token的作用域是否一致。
  • 比如参考页可能自动携带了当前用户的根目录作为parents,而你的代码中没有指定,导致请求找不到有效的目标位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:47:30