在 Firebase 云功能上下载视频文件时出错

问题描述 投票:0回答:1

截至 2024 年 1 月 26 日星期五,我们的 Firebase 云功能在尝试下载视频资源时开始失败。我们已经成功使用以下设置一年了,但截至昨天,如果我们没有更改代码,它就开始失败。

设置:

  • Firebase 管理 12.0.0
  • 节点20
import { getStorage } from 'firebase-admin/storage';

  const fileName = path.basename(filePath);
  const bucket = getStorage().bucket();
  const downloadFilePath = path.join(os.tmpdir(), fileName);
 
  functions.logger.log(
    'In thumbnail creation, video downloaded locally to',
    downloadFilePath,
  );

  const downloadFile = () => {
    return new Promise((resolve, reject) => {
      const stream = bucket.file(filePath).createReadStream();

      stream.on('data', (data) => {
        console.log('🚀 ~ PromptService ~ data ~ data:', data);
        return;
      });
      stream.on('error', (err) => {
        console.log('🚀 ~ PromptService ~ err ~ err:', err);
        return reject;
      });
      stream.on('end', (data: any) => {
        console.log('🚀 ~ PromptService ~ err ~ err:', data);
        return resolve;
      });
      stream.pipe(fs.createWriteStream(downloadFilePath));
      functions.logger.log(
        `gs://${bucket.name}/${fileName} downloaded to ${downloadFilePath}.`,
      );
    });
  };
  // Downloads the file
  console.log('downloading file');
  await downloadFile();
  console.log('finished downloading file');

我正在使用文件缓冲区从数据侦听器接收控制台日志,但在最终侦听器触发错误之前失败。

我也尝试过下载方法,但没有成功。

bucket.file(filePath).download()

我期望文件传输完成并通过管道传输到写入流,我可以在其中使用该文件来制作屏幕截图。

node.js google-cloud-functions google-cloud-storage
1个回答
0
投票

由于我的云函数运行时环境(节点 20)出现问题,我最终切换到谷歌云 TransferManager 并实现

downloadFileInChunks
以使其正常工作。
download
createReadStream
存在名为
stream-shift
的依赖项问题。如果您遇到类似问题,请参阅此链接https://github.com/googleapis/nodejs-storage/issues/2368

新实施

const transferManager = new TransferManager(bucket);
    // Downloads the files
    await transferManager.downloadFileInChunks(inputPath, {
      destination: downloadFilePath,
    });
© www.soinside.com 2019 - 2024. All rights reserved.