NodeJS MulterError:wrappedFileFilter中出现意外字段,2个文件位于不同文件夹中

7kjnsjlb  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(108)

首先,我为我的英语道歉。我在使用Multer和Express上传文件时遇到了一些问题。
我试图上传两个文件到两个不同的文件夹,但我总是得到消息“MulterError:Unexpected field at wrappedFileFilter”消息.我也试过只使用“uploadVideo”或“uploadImage”,但错误仍然是一样的.我已经创建了“videos”和“imagenes”文件夹
我只是从Multer开始。我使用下面的代码:

multer.js

const multer = require('multer');
const path = require('path');

const multerVideo = multer.diskStorage({
    destination: (req,file,cb) => {
        const rutaVideo = path.join(__dirname + 'videos');
        cb(null,rutaVideo);
    },
    filename: (req, file,cb) => {
        const nombreVideo = Date.now() + path.extname(file.fieldname);
        cb(null,nombreVideo);
    }
});
const multerImage = multer.diskStorage({
    destination: (req,file,cb) => {
        const rutaImagen = path.join(__dirname + 'imagenes');
        cb(null,rutaImagen);
    },
    filename: (req, file,cb) => {
        const nombreImagen = Date.now() + file.fieldname;
        cb(null,nombreImagen);
    }
});

const updateVideo = multer({Storage: multerVideo}).single('video');
const updateImage = multer({storage: multerImage}).single('imagen');

module.exports = {
    updateVideo,
    updateImage
}

字符串

router.js

const express = require('express');
const router = express.Router();
const multer = require('./multer');

router.get('/',(req,res) => {
 res.render('index');
});

router.post('/subir',multer.updateVideo, multer.updateImage,(req,res) =>{
    res.send('success?')
});

module.exports = router;
});

index.js

const bodyParser = require('body-parser');
const path = require('path');
const express = require('express');
const indexRoute = require('./router');
const app = express();
const port = 3000;
app.use(bodyParser.urlencoded({ extended: true }));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine','ejs');

app.use('/',indexRoute);
app.listen(port,() => {
    console.log(`Servidor escuchando en el puerto ${port}`);
})

index.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MULTER PROBE</title>
</head>
<body>
    <div class="container">
        <div class="form-container">
            <form action="/subir" method="post" enctype="multipart/form-data">
                <input type="file" name="video" id="video" class="video">
                <input type="file" name="imagen" id="imagen" class="imagen">
                <input type="submit" id="submit" class="submit">
            </form>
        </div>
    </div>
</body>
</html>


谢谢你,谢谢

yftpprvb

yftpprvb1#

不,这不起作用,单个中间件将解析所有提供的字段。
看起来你只改变了目标文件夹,所以你可以在一个中间件中处理它,在destination方法中。
因此,将两个middeares合并为一个,然后在destination方法中,手动检查每个fieldname,然后为每个构建所需的路径(您可以为filename下的文件执行相同的操作)
检查fieldname

destination: (req, file, cb) => {
    if (file.fieldname === 'video') {

字符串

试试这个:

router.js

// use single middleware
router.post('/subir', multer.upload, (req, res) => {
    res.send('success?')
});

multer.js

const multer = require('multer');
const path = require('path');

const uploadStorage = multer.diskStorage({

    // in each method, check `file.fieldname`
    destination: (req, file, cb) => {
        if (file.fieldname === 'video') {
            const rutaVideo = path.join(__dirname + 'videos');
            cb(null, rutaVideo);
        } else if (file.fieldname === 'imagen') {
            const rutaImagen = path.join(__dirname + 'imagenes');
            cb(null, rutaImagen);
        } else {
            // some default fallback..      

        }
    },
    filename: (req, file, cb) => {
        if (file.fieldname === 'video') {
            const nombreVideo = Date.now() + path.extname(file.fieldname);
            cb(null, nombreVideo);
        } else if (file.fieldname === 'imagen') {
            const nombreImagen = Date.now() + file.fieldname;
            cb(null, nombreImagen);
        } else {
            // some fallback
        }
    }
});

// use .any() to handle fields manually
const upload = multer({
    Storage: uploadStorage
}).any();

module.exports = {
    upload
}

相关问题