TypeError: Невозможно прочитать свойство 'file' нулевого busboy в облачной функции firebase - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь написать простую функцию, которая принимает запрос, содержащий данные multipart / form, и загружает изображение в облачное хранилище firebase с помощью busboy, но в консоли облачных функций выдает следующую ошибку «Ошибка типа: Не удается прочитать свойство'file' of null ".Я проверил, отправляет ли почтальон правильный заголовок «Content-type: multipart / form-data» и все ли в порядке.Любая помощь будет высоко ценится.

 import * as functions from 'firebase-functions';
 import * as admin from 'firebase-admin';
 admin.initializeApp();
 const os = require('os');
 const path = require('path');
 const fs = require('fs');

 const Busboy = require('busboy');
 var { Storage } = require('@google-cloud/storage');

  var gcs = new Storage({
  projectId: 'xxxxxxxxxxxxxxx',
  keyFilename: 'xxxxxxxxk-y7fqf-38xxx5121.json'
 });

  exports.uploadFile = functions.https.onRequest((req, res) => {
  cors(req, res, () => {
  if (req.method !== "POST") {
    res.status(500).json({
      message: "Not allowed"
    });
  }
  console.log(req.body)
  const busboy = new Busboy({ headers: req.headers });
  let uploadData = null;

  busboy.on('file', function (fieldname, file, filename, encoding, 
  mimetype) {
    const filepath = path.join(os.tmpdir(), filename);
    uploadData = { file: filepath, type: mimetype };
    file.pipe(fs.createWriteStream(filepath));
  });

  busboy.on("finish", () => {
    const bucket = gcs.bucket("xxxxxxxxxxx.appspot.com");
    // const bucket = admin.storage().bucket();
    bucket
      .upload(uploadData.file, {
        uploadType: "media",
        metadata: {
          metadata: {
            contentType: uploadData.type
          }
        }
      })
      .then(() => {
        res.status(200).json({
          message: "It worked!"
        });
      })
      .catch(err => {
        res.status(500).json({
          error: err
        });
      });
  });
  req.pipe(busboy)
});
});`
...