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

如何用Google Drive API v3将HTML2Canvas生成图片通过JS+PHP上传至Google Drive

实现Google Drive图片上传分步指导

我们选用PHP后端上传方案,不需要暴露API凭证,更适合上传到你个人Google Drive的场景,步骤如下:


步骤1:准备服务账号与目标文件夹配置

  • 打开你之前启用了Drive API的Google Cloud项目,进入「凭证」页面,创建新的服务账号
  • 为服务账号生成JSON格式的密钥文件,保存到你网站的安全目录下(不要放到可公开访问的目录,避免泄露)
  • 记录服务账号的邮箱地址,打开你的个人Google Drive,新建专门存储上传图片的文件夹
  • 右键该文件夹选择「共享」,将服务账号邮箱添加为协作者,权限设为「编辑者」,保存设置
  • 记录该文件夹的ID:在浏览器打开文件夹时,地址栏中folders/后面的字符串即为文件夹ID

步骤2:安装Google官方PHP客户端

使用Composer安装Drive API依赖,在你的站点根目录执行命令:

composer require google/apiclient:^2.0

如果没有安装Composer,可以直接下载官方预打包的客户端包放到项目目录中。


步骤3:修改savePNG.php代码,添加上传到Google Drive的逻辑

修改后的完整代码如下,对应替换你自己的密钥文件路径和目标文件夹ID即可:

<?php
// 引入Composer自动加载文件,路径根据你自己的项目结构调整
require __DIR__ . '/vendor/autoload.php';

$img = $_POST['img'];
$unm = $_POST['unm'];

if (strpos($img, 'data:image/png;base64') === 0) {
    $img = str_replace('data:image/png;base64,', '', $img);
    $img = str_replace(' ', '+', $img);
    $data = base64_decode($img);
    $path = "images/userCards/{$unm}/";
    if (!is_dir($path)) {
        mkdir($path);
    }
    $fileName = date('Ymdhis') . $unm . '.png';
    $file = $path . $fileName;

    if (file_put_contents($file, $data)) {
        // 本地保存成功后,开始上传到Google Drive
        // 初始化Google客户端
        $client = new Google\Client();
        // 替换为你自己的服务账号密钥文件路径
        $client->setAuthConfig('path/to/your/service-account-key.json');
        $client->addScope('https://www.googleapis.com/auth/drive.file');
        
        $driveService = new Google\Service\Drive($client);
        
        // 配置上传文件的元信息
        $fileMetadata = new Google\Service\Drive\DriveFile([
            'name' => $fileName,
            // 替换为你自己的Google Drive目标文件夹ID
            'parents' => ['替换为你的目标文件夹ID']
        ]);
        
        // 读取本地文件内容上传
        $content = file_get_contents($file);
        $uploadedFile = $driveService->files->create($fileMetadata, [
            'data' => $content,
            'mimeType' => 'image/png',
            'uploadType' => 'multipart'
        ]);
        
        if ($uploadedFile->id) {
            echo "CARD SAVED AND UPLOADED TO GOOGLE DRIVE!";
        } else {
            echo "CARD SAVED TO LOCAL BUT UPLOAD TO GOOGLE DRIVE FAILED!";
        }
    } else {
        echo 'CARD NOT SAVED!';
    }
}
?>

常见问题排查

  • 如果上传失败,先检查服务账号是否已经被添加为目标文件夹的编辑者
  • 确认密钥文件路径配置正确,且PHP进程有读取密钥文件的权限
  • 确认Drive API已经在Google Cloud控制台中启用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:04