首页 > 解决方案 > 如何使用 Multer 修复 req.file 未定义?

问题描述

我正在尝试使用multer制作文件上传REST API,文件将保存在diskStorage中。这是我的 HTML 表单的样子:

<form action="/notes" method="POST" enctype="multipart/form-data">
<h1>Share new notes!</h1>
<div style="height: 30px;"></div>
<!-- title  -->
<h3>Title</h3>
<div class="input-group mb-3">
    <input type="text" class="form-control" name="title">
</div>
<div style="height: 30px;"></div>

<h3>File</h3>
<input type="file" class="form-control-file" id="exampleFormControlFile1" name="file">
<button class="btn btn-light btn-lg btn-block">Submit</button>
</form>

话虽如此,这就是我的 app.js 中所有相关的东西——我已经需要所有相关的依赖项,正如你所看到的,我正在使用 mongoose 和 mongodb 来存储文件。我检查了很多次,据我所知没有任何语法错误,但它一直说 req.file 未定义:

app.use(fileUpload()); // Don't forget this line!


//upload multer middleware
const storage = multer.diskStorage({ 
    destination:(req, file, cb) =>{
        cb(null,'uploads')
    },
    filename:(req, file, cb)=>{
        cb(null, file.fieldname+'-'+Date.now())
    }
})
  const upload = multer({ storage: storage }); 

app.post('/notes', upload.single('file'), (req, res, next)=>{

    newNote = {
        title: req.body.title,
        file: {
            data: fs.readFileSync(path.join(__dirname + '/uploads/' + req.file.filename)),
            contentType: 'image/png'
        }
    }
    Note.create(newNote, function(err, newPost){
        if(err){
            console.log(err)
            res.render('notes/new')
        }else{
            res.redirect('/notes')
        }
    }) })

具体来说,这是错误一直在说:

TypeError: Cannot read property 'filename' of undefined

标签: node.jsexpressmongoosefsmulter

解决方案


推荐阅读