Как решить MulterError: Неожиданное поле в валидации типов файлов в expressjs / multer? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь выполнить проверку типа файла в expressjs / multer, поскольку из приведенного ниже кода я не могу загрузить файлы локально, и я получаю следующую ошибку. Любые подсказки, почему я получаю это?

MulterError: Неожиданное поле в wrappedFileFilter (C: \ Users \ Sarvesh \ node_modules \ multer \ index.js: 40: 19) и т. Д. *

const express = require('express');
const multer = require('multer');
const fileType = require('file-type');

const app = new express();
const accepted_extensions = ['jpg', 'png', 'gif'];
const upload = multer({
    limits: { 
        fileSize: 5 * 1024 * 1024,  // 5 MB upload limit
        files: 1                    // 1 file
    },
    fileFilter: (req, file, cb) => {
        // if the file extension is in our accepted list
        if (accepted_extensions.some(ext => file.originalname.endsWith("." + ext))) {
            return cb(null, true);
        }

        // otherwise, return error
        return cb(new Error('Only ' + accepted_extensions.join(", ") + ' files are allowed!'));
    }
});

app.get('/',function(req,res){
      res.sendFile(__dirname + "/index.html");
});


/**
 * Middleware for validating file format
 */
function validate_format(req, res, next) {
    // For MemoryStorage, validate the format using `req.file.buffer`
    // For DiskStorage, validate the format using `fs.readFile(req.file.path)` from Node.js File System Module
    let mime = fileType(req.file.buffer);

    // if can't be determined or format not accepted
    if(!mime || !accepted_extensions.includes(mime.ext))
        return next(new Error('The uploaded file is not in ' + accepted_extensions.join(", ") + ' format!'));

    next();
}

app.post("/", 
    // First middleware, validate number of files (one file) / size (5MB) / extension ('jpg', 'png', 'gif')
    upload.single("file_field_name"), 

    // Second middleware, validate file format ('jpg', 'png', 'gif')
    validate_format,

    function(req, res, next) {
        // Passed validations, do something with the file (`req.file`)
        // ...


        res.send("file uploaded");
    }
);

app.listen(3000, () => {
    console.log("Express listening on port 3000");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...