req.file is undefined (multer, node.js)



我一直在尝试上传图像一段时间了,但req.file仍未定义。有人能明白为什么吗?

这是我的页面。当我单击"+"字形时,我可以选择一个图像,但在服务器端 req.file 仍然是空的。

EJS 文件

输入[类型="文件"]和输入[类型="提交"]具有CSS样式显示:无

<form action="/profile/addProfilepicture" method="post" id="form" enctype="multipart/form-data">
<span id="upload" class="glyphicon glyphicon-plus-sign"></span>
<label for="profilePic"></label>
<input id=profilePic type='file'  />
<input type="submit">
</form>
<img class="profileImg"
src="<%="images/pexels-photo-370799.jpeg"%>"
alt="fail">

客户端 JS 文件

当我单击"+"字形图标时,它可以让我选择一个图像。当我这样做时,这将触发表单提交和发送发布请求。

$("#upload").on('click',function() {
$("input[type='file']").click();
});
$('input[type="file"]').change(function (e) {
$("input[type='submit']").click()
});

服务器端 JS

在服务器端,它停止在:

类型错误: 无法读取未定义的属性"文件名" at C:\Users\Tijl Declerck\Desktop\projects\digitalNomadApp\routes\profile.js:27:38 at Immediate._onImmediate (C:\Users\Tijl Declerck\Desktop\projects\digitalNomadAppode_modules\multer\lib\make-middleware.js:53:37) at runCallback (timers.js:793:20) at tryOnImmediate (timers.js:751:5) at 进程立即 [作为_immediateCallback] (计时器.js:722:5)

我尝试的console.logs给了我这个:req.body返回一个空对象,req.file返回未定义。

var express = require('express');
var router = express.Router();
var multer  = require('multer');
var User = require('../models/Users');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/uploads/profilePics')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
var upload = multer({ storage: storage }).single('myImage');

router.post('/addProfilePicture', function (req, res) {
var profilePicUrl = '';
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
} else {
console.log(req.file);
profilePicUrl = req.file.filename;
User.update({username: req.user.username}, {'profilePic.uploaded': true, 'profilePic.link': profilePicUrl}, function(err, doc){
console.log('THIS IS DONE')
});
}
});
});

您必须为文件输入提供一个名称,并且它应该与单个方法的名称匹配,这是来自 multer doc:

.单(字段名称)

接受名称为字段名称的单个文件。单个文件将是 存储在 req.file 中。

这没有很好的文档记录,但字段名称是指输入名称属性

EJS 文件

<input id='profilePic' name='myImage' type='file'  />

表达

...
var upload = multer({ storage: storage }).single('myImage');
...

最新更新