如何通过Google Drive API获取自己账号下的文件夹文件?
解决Google Drive API访问私有文件的insufficientFilePermissions错误
你当前代码用的setDeveloperKey是API密钥认证,这种方式只能访问公开共享的Drive文件,无法访问你账号下的私有文件,所以触发权限不足错误。要访问自己的私有文件,推荐用服务账号认证(适合后台脚本,无需用户交互),步骤如下:
1. 创建并配置服务账号
- 登录Google Cloud控制台,找到你的项目,进入「IAM与管理」→「服务账号」,创建新的服务账号。
- 创建完成后,点击该服务账号→「密钥」→「添加密钥」→「创建新密钥」,选择JSON格式,下载密钥文件到项目目录。
- 打开Drive,把你需要访问的文件/文件夹共享给服务账号的邮箱(即JSON文件里的
client_email字段),权限设为「查看者」或「编辑者」。
2. 修改PHP代码
替换原来的API密钥认证逻辑,改用服务账号密钥文件认证:
<?php use Google\Client; use Google\Service\Drive; $files = []; try { require_once 'vendor/autoload.php'; $client = new Google\Client(); $client->setApplicationName("MYNAME"); // 加载服务账号密钥文件,替换为你的文件路径 $client->setAuthConfig('path/to/your-service-account-key.json'); // 设置权限范围,只读访问可改用Drive::DRIVE_READONLY $client->addScope(Drive::DRIVE); $client->setAccessType('offline'); $driveService = new Drive($client); $pageToken = null; do { $response = $driveService->files->listFiles([ 'q' => "mimeType='image/jpeg'", 'spaces' => 'drive', 'pageToken' => $pageToken, 'fields' => 'nextPageToken, files(id, name)', ]); foreach ($response->files as $file) { printf("Found file: %s (%s)\n", $file->name, $file->id); } $files = array_merge($files, $response->files); $pageToken = $response->pageToken; } while ($pageToken != null); var_dump($files); } catch(Exception $e) { echo "Error Message: " . $e->getMessage(); } ?>
关键说明
- 服务账号是独立身份,必须把你的Drive资源共享给它才能访问,操作和共享给普通用户一致。
- 优先使用最小权限,比如只读需求就用
Drive::DRIVE_READONLY,降低安全风险。 - 服务账号密钥文件包含敏感信息,绝对不要提交到代码仓库或公开泄露。
内容的提问来源于stack exchange,提问作者Jesus Azocar
相关产品推荐
相关产品推荐

