如何将Firebase数据库连接到Google Apps Script,实现Firebase图片同步至Google Drive
实现Google Apps Script连接Firebase并同步图片到Google Drive的方案
第一步:获取Firebase认证凭据
你不需要在Firebase数据库中找现成的OAuth token,通过服务账号生成凭据即可:
- 进入Firebase控制台的对应项目,打开项目设置页面,切换到「服务帐号」标签
- 找到「Firebase Admin SDK」板块,点击「生成新的私钥」,下载JSON格式的密钥文件,后续认证只需用到该文件内的
client_email和private_key两个字段
第二步:Google Apps Script端认证逻辑配置
先在GAS项目中导入OAuth2官方库,库ID为1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF,再编写如下认证代码:
// 替换为你自己的配置参数 const CONFIG = { firebase_client_email: "JSON密钥里的client_email字段值", firebase_private_key: "JSON密钥里的private_key字段值,保留完整的头尾格式", firebase_storage_bucket: "你的Firebase存储桶名称,格式为xxx.appspot.com", drive_target_folder_id: "目标Google Drive文件夹的ID" } // 生成Firebase访问用OAuth临时token function getFirebaseToken() { const authService = OAuth2.createService("FirebaseAuth") .setTokenUrl("https://oauth2.googleapis.com/token") .setIssuer(CONFIG.firebase_client_email) .setPrivateKey(CONFIG.firebase_private_key) .setScope("https://www.googleapis.com/auth/devstorage.read_only https://www.googleapis.com/auth/drive"); if (authService.hasAccess()) return authService.getAccessToken(); throw new Error("认证失败:" + authService.getLastError()); }
第三步:实现图片拉取与上传逻辑
通过Firebase Storage的REST API拉取图片,再上传到Google Drive:
function syncImages() { const token = getFirebaseToken(); // 拉取Firebase存储中的文件列表 const listRes = UrlFetchApp.fetch(`https://firebasestorage.googleapis.com/v0/b/${CONFIG.firebase_storage_bucket}/o`, { headers: { Authorization: `Bearer ${token}` } }); const fileList = JSON.parse(listRes.getContentText()).items || []; const targetFolder = DriveApp.getFolderById(CONFIG.drive_target_folder_id); fileList.forEach(fileItem => { // 过滤非图片文件,可按需调整匹配规则 if (!fileItem.contentType.startsWith("image/")) return; // 下载图片二进制内容 const imageRes = UrlFetchApp.fetch(`https://firebasestorage.googleapis.com/v0/b/${CONFIG.firebase_storage_bucket}/o/${encodeURIComponent(fileItem.name)}?alt=media`, { headers: { Authorization: `Bearer ${token}` } }); // 上传到Google Drive const imageBlob = imageRes.getBlob().setName(fileItem.name); targetFolder.createFile(imageBlob); }); }
注意事项
- 首次运行脚本需要按提示完成GAS的权限授予,授权成功后即可正常执行
- 如果存储的图片数量较多,可自行添加分页逻辑拉取文件列表,避免单次请求超限
- 服务账号私钥属于敏感信息,不要泄露到公开可访问的环境中
内容的提问来源于stack exchange,提问作者dtETSmtl
相关产品推荐
相关产品推荐

