我正在尝试将图像上传到Firebase云功能。我认为我已经阅读了有关此内容的全部文章,但找不到解决方案。

我已经使用了“ formidable.IncomingForm()”,“ multer”和“ busboy”,但是没有人在工作。

我知道我必须使用busboy。我想与该库共享我的最后代码。

app.post('/',function(req,res) {
    var busboy = new Busboy({headers: req.headers});
    var files = 0, finished = false;
    busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
        console.log('File [' + fieldname + ']: filename: ' + filename);
        console.log("Uploading: " + filename);
        ++files;
      //  const temp = os.tmpdir();
      //  var path = temp.writeFileSync(file);
       let path=os.tmpdir()+"/"+filename
       let p=fs.writeFileSync(path,file)
       console.log(path)
        var fstream = fs.createWriteStream(path);
        fstream.on('finish', function () {
            if (--files === 0) {
                // Upload a local file to a new file to be created in your bucket.
                bucket.upload(path,function (err, file) {

                    if (!err) {
                        console.log("Uploaded: " + path);
                        res.json({
                            uploaded: true,
                            created_at: new Date().getTime(),
                            filename: filename,
                            mimeType: mimetype
                        });
                    }else{
                        console.error("err: " + err);
                        var error = new ErrorResponse(400);
                        error.errors+=err;
                        res.json(error);
                    }
                });
            }
        });
        file.pipe(fstream);
    })
    req.pipe(busboy);
})


此代码在我的本地服务器中成功上传文件,但在Firebase Cloud功能中没有成功上传文件。

我的要求是:
node.js - 如何将图像上传到Firebase?可能吗?-LMLPHP

问题是函数“ busboy.on('file'...”永远不会执行

最佳答案

由于我是busboy的菜鸟。我会坚持使用最受欢迎的图书馆multer

使用multer's内存存储,将图像作为缓冲区上传。并使用该缓冲区将图像上传到存储桶。

请尝试以下代码段:

var multer = require('multer')
// using the in-memory storage
var upload = multer()

// use the same paramter you are using for uploading from postman
app.post('/', upload.single('file'), function(req, res) {
  const fileBuff = req.file.buffer
  const fileName = req.file.filename
  const mimeType = req.file.mimetype


  const file = myBucket.file(fileName);

  file.save(fileBuff)
    .then(success => {
      res.json({
        uploaded: true,
        created_at: new Date().getTime(),
        filename: fileName,
        mimeType: mimeType
      });
    })
    .catch(err => {
      console.error("err: " + err);
      var error = new ErrorResponse(400);
      error.errors += err;
      res.json(error);
    })
})

10-07 19:03
查看更多