【问题标题】:Trouble saving FileStream to bucket using fireabse admin SDK and busboy使用 fireabse admin SDK 和 busboy 将 FileStream 保存到存储桶时遇到问题
【发布时间】:2020-02-16 08:04:18
【问题描述】:

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

这会成功并且文件被保存到bucket但是同时上面的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】:

    解决方案非常简单,我看错了 busboy doc。

    需要使用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)
      });
    });  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 2014-06-06
      • 2020-02-18
      • 1970-01-01
      • 2015-12-07
      • 2013-12-30
      • 2020-07-29
      相关资源
      最近更新 更多