使用fireabse admin SDK和busboy将FileStream保存到存储区时出现问题

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

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!');
  });
}

这将成功完成,并且文件已保存到存储桶中,但同时上述Promise捕获到异常:

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

以及文件已损坏。此错误告诉我应该将FileStream转换为Buffer吗?

我还要注意,fileContainer.file的类型为FileSream。

谢谢。

node.js firebase-storage filestream firebase-admin busboy
1个回答
0
投票

解决方案非常简单,我错过了busboy文档。

需要使用busboy的file.on(data)侦听器作为Buffer来访问文件数据,而不是将原始传入文件作为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)
  });
});  
© www.soinside.com 2019 - 2024. All rights reserved.