запрос данных формы multer.тело не определено в Express (загрузка файла Firebase)

# #node.js #firebase #express #file-upload #multer

Вопрос:

Я пытаюсь создать конечную точку API для приема небольших аудиофайлов от пользователя и загрузки их в хранилище firebase. Я использую multer для обработки данных формы, но при тестировании с почтальоном я не уверен, работает ли upload.single («файл») с req.body и req.файл не определен. я делаю что-то не так?

Я читал много тем stackoverflow об этом, но ни одна из них не работала

код:

 const functions = require('firebase-functions');
const googleStorage  = require('@google-cloud/storage');
const express = require('express');
const cors = require('cors');
const compression = require("compression");
const saltedMd5 = require("salted-md5");
const multer = require("multer");
const path = require("path");

const app = express();

const admin = require('firebase-admin');
admin.initializeApp({
  storageBucket: <bucket address>
});
app.locals.bucket = admin.storage().bucket(<bucketName>);
const db = admin.firestore();

app.use(cors({ origin: true }));
app.use(express.urlencoded({extended: true}));
app.use(express.json());


const upload = multer({
  storage: multer.memoryStorage(),
});


app.post("/upload", upload.single("file"),  (req, res) => {
  console.log(req.file); //undefined
  console.log(req.files); //undefined
  console.log(req.body); //[Object: null prototype] {}
  console.log(req.name); //undefined
  const name = saltedMd5(req.file.originalname, "SUPER-S@LT!");
  const fileName = name   path.extname(req.file.originalname); //error 'originalname' of undefined
  app.locals.bucket
    .file(req.file)
    .createWriteStream()
    .end(req.file.buffer)
    .then((i) => res.send("done"))
    .catch((e) => res.send(e));
});

 

Запрос в скриншоте почтальона

Комментарии:

1. Я не могу заметить ничего странного в бэкэнд-коде, и запрос от почтальона кажется нормальным. Что req.headers выводится, если вы регистрируете его?

Ответ №1:

Оказывается, Firebase и Малтер не очень хорошо ладят друг с другом. Я ссылался на эту статью, в которой объясняется, почему мультер не работает и как достичь той же цели с помощником официанта.

https://mikesukmanowsky.com/firebase-file-and-image-uploads/