首先,我为我的英语道歉。我在使用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>
型
谢谢你,谢谢
1条答案
按热度按时间yftpprvb1#
不,这不起作用,单个中间件将解析所有提供的字段。
看起来你只改变了目标文件夹,所以你可以在一个中间件中处理它,在
destination
方法中。因此,将两个middeares合并为一个,然后在
destination
方法中,手动检查每个fieldname
,然后为每个构建所需的路径(您可以为filename
下的文件执行相同的操作)检查
fieldname
:字符串
等
试试这个:
router.js
型
multer.js
型