# #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/