调用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
相关产品推荐
相关产品推荐

