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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:45:12