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

Firebase云函数视频文件下载失败问题求助

Firebase云函数下载视频资产失败排查与修复

问题概述

自2024年1月26日起,Firebase云函数下载视频资产时失败,此前稳定运行一年且无代码变更。使用Firebase Admin 12.0.0 + Node 20,代码中通过流下载能收到data缓冲区日志,但error/end监听器未触发,调用bucket.file(filePath).download()同样无效。

核心问题排查与修复

1. Promise调用错误(代码致命问题)

你的downloadFile函数中,Promise的resolve和reject仅返回了函数引用,未实际调用,导致Promise永远无法完成,函数会因超时而静默失败。

错误代码片段:

stream.on('error', (err) => {
  console.log('🚀 ~ PromptService ~ err ~ err:', err);
  return reject; // 未调用reject(err)
});
stream.on('end', (data: any) => {
  console.log('🚀 ~ PromptService ~ err ~ err:', data);
  return resolve; // 未调用resolve()
});

修正后代码:

const downloadFile = () => {
  return new Promise((resolve, reject) => {
    const readStream = bucket.file(filePath).createReadStream();
    const writeStream = fs.createWriteStream(downloadFilePath);

    readStream.on('data', (data) => {
      console.log('接收数据块:', data.length);
    });
    readStream.on('error', (err) => {
      console.error('读取流错误:', err);
      reject(err); // 调用reject并传入错误信息
    });
    readStream.on('end', () => {
      console.log('读取流结束');
      resolve(); // 调用resolve完成Promise
    });

    // 监听写入流错误,避免写入失败无反馈
    writeStream.on('error', (err) => {
      console.error('写入流错误:', err);
      reject(err);
    });
    writeStream.on('finish', () => {
      console.log('文件写入完成');
    });

    readStream.pipe(writeStream);
    functions.logger.log(`开始下载 gs://${bucket.name}/${fileName} 到 ${downloadFilePath}`);
  });
};

2. 云函数资源限制

视频文件过大时,云函数默认配置(256MB内存、90秒超时)可能不足以完成下载:

  • 调整云函数内存至512MB或更高
  • 延长超时时间至最大9分钟(需在Firebase控制台或firebase.json中配置)

3. 存储权限与服务端变更

  • 检查云函数使用的服务账号权限,确认是否有storage.objects.get权限(避免控制台权限被误改)
  • 排查Firebase Storage服务端是否有变更(2024年初部分区域可能有底层更新,可查看Firebase状态页确认)

4. Node.js 20兼容性验证

Firebase Admin 12.0.0官方支持Node.js 20,但需确认依赖包是否存在兼容性问题:

  • 执行npm audit检查依赖漏洞
  • 尝试临时降级至Node.js 18测试,确认是否为Node版本导致的流处理问题

验证步骤

  1. 修复Promise调用错误后重新部署函数
  2. 增大云函数内存与超时时间
  3. 下载小体积视频测试,确认基础功能正常
  4. 逐步测试大体积视频,观察是否仍有异常

内容的提问来源于stack exchange,提问作者Eric Van Dyn Hoven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:55:29