Firebase и busboy, я могу получить весь файл в памяти, или? - PullRequest
0 голосов
/ 11 мая 2019

Я хочу загрузить довольно большие файлы в проекте 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 МБ есть только одна строка. Значит ли это, что весь файл хранится в памяти?

РЕДАКТИРОВАТЬ: busboy.end(req.rawBody) от https://cloud.google.com/functions/docs/writing/http#multipart_data

1 Ответ

1 голос
/ 11 мая 2019

Весь запрос и ответ для ввода и вывода облачных функций полностью хранится в памяти перед их передачей клиенту и обратно. Максимальный размер полезной нагрузки для запросов и ответов составляет 10 МБ, как показано в документации .

При работе с большими файлами следует рассмотреть возможность загрузки в облачные функции, а затем запустить функцию оттуда.

...