Проблема с сохранением FileStream в корзину с использованием fireabse admin SDK и busboy - PullRequest
0 голосов
/ 19 октября 2019

С помощью busboy я пытаюсь сохранить FileStream в корзину Firebase.

код:

const admin = require('firebase-admin');
const userFilesBucket = admin.storage().bucket(USER_FILES_BUCKET_NAME);


function handlePost(req, res){
  const busboy = new Busboy({ headers: req.headers })

  busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
    file.on('data', function(data) {
    });
    file.on('end', function() {
      uploadFile({filename: filename, file:file, mimetype:mimetype})
        .catch(err => {
          console.log("attemptFileUpload | err:", err)
          reject(err)
        });
    });
  });
}

function uploadFile(fileContainer){

  const filePath = fileContainer.filename

  const file = userFilesBucket.file(filePath);

  file.save(fileContainer.file, function(err) {
    if (!err) console.log('Sucess | uploaded a blob or file!');
  });
}

Это выполнится успешно, и файл будет сохранен в корзину, но в то же время вышеприведенное обещание ловит исключение:

The "chunk" argument must be one of type string or Buffer. Received type object

, а также файлы повреждены. Эта ошибка говорит мне, что я должен преобразовать FileStream в Buffer?

Следует также отметить, что fileContainer.file имеет тип FileSream.

Спасибо.

1 Ответ

0 голосов
/ 20 октября 2019

Решение было очень простым, с моей стороны было упущено прочтение документа busboy.

Необходим для использования слушателя busboy file.on(data) для доступа к данным файла в качестве буфера, а не к исходному входящему файлу как FileStream.

busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
  file.on('data', data => {
    uploadFile({filename: filename, file:data, mimetype:mimetype})
      .catch(err => {
        console.log("attemptFileUpload | err:", err)
      });
  });
  file.on('end', function() {
      // move from here, up to file.on(data)
  });
});  
...