Firebase和busboy,我是否将整个文件保存在内存中?

时间:2019-05-11 14:31:24

标签: firebase pipe streaming google-cloud-functions busboy

我想在node.js / Firebase项目中上传相当大的文件。我试图了解Busboy是否适合我的需求。

Busboy文档中的示例以

结尾
req.pipe(busboy);

但是,这在Firebase中不起作用。看来您应该使用

busboy.end(req.rawBody);

这对我有用(至少在本地,firebase serve下。但是也许有所不同。在上面提到的示例中,您有以下内容:

if (req.method === 'POST') {
    let busboy = new Busboy({ headers: req.headers });
    busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
      console.log('File [' + fieldname + ']: filename: ' + filename + ', encoding: ' + encoding + ', mimetype: ' + mimetype);
      file.on('data', (data) => {
        console.log('File [' + fieldname + '] got ' + data.length + ' bytes');
      });

我希望看到file.on("data", ...)的多个输出,但是100 MB文件只有一行。这是否意味着整个文件都保存在内存中?

编辑:busboy.end(req.rawBody)来自https://cloud.google.com/functions/docs/writing/http#multipart_data

1 个答案:

答案 0 :(得分:1)

有关Cloud Functions输入和输出的整个请求和响应,在与客户端之间进行传输之前,将其完全保留在内存中。请求和响应的最大有效负载大小为10MB,如documentation所示。

在处理大文件时,您应该考虑上传到Cloud Functions,然后从那里触发一个函数。