从Firebase / Google Cloud Storage中读取作为Node.js函数中的缓冲区

时间:2018-10-31 11:51:54

标签: node.js firebase google-cloud-storage firebase-storage

我正在使用Firebase函数的Node.js 8版本,并希望以Buffer的形式从Google Cloud Storage检索文件到该函数。

这似乎很简单:

const admin = require('firebase-admin')
const getRawBody = require('raw-body')

async function myFunction (path) {
  const bucket = admin.storage().bucket()
  const file = await bucket.file(path).get()
  console.log("All good so far.")
  const buffer = await getRawBody(file.createReadStream()) // often fails.
}

我正在读取的文件很小(130kb)。

did 工作了一段时间,但现在始终失败,并显示内存限制错误或超时错误,提示Firebase / GCS问题。

我知道我可以增加该函数的内存限制,但是如果在一个很小的文件上失败,则说明工作中存在较大问题,并且在更大的文件上,它总是会失败。

是否有更好的方法将GCS文件转换为Buffer

如果没有,那是可以解决的问题吗?

2 个答案:

答案 0 :(得分:0)

问题显然不是Google存储问题,而是其他地方的数据使用导致内存溢出。

结果,console.log语句未记录到功能日志中,从而将原因混为一谈。

答案 1 :(得分:0)

当我从 get() 中删除 const file = await bucket.file(path).get() 时为我工作

我的工作代码是:

const admin = require('firebase-admin')
const getRawBody = require('raw-body')

async function getStream (path) {
    const bucket = admin.storage().bucket()
    const file = await bucket.file(path)
    const buffer = await getRawBody(file.createReadStream()) 
}