上载单个文件时,multer返回req.file为未定义

时间:2018-07-14 19:19:30

标签: javascript express multer

我已经仔细阅读了有关该主题的先前问题,但是解决这些问题的方法通常是使用不带enctype的html表单。

这是html表单

<form action='/profile' method='post'enctype="multipart/form-data">
  <label for="photo">Image</label>
  <input type="file" id="photo" name="photo" accept="image/*" required>
  <input type='submit' value='Upload!' />
</form>

这是研磨机的设置

//Local Storage
var storage =  multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './uploads');
},
filename: function (req, file, callback) {
callback(null, Date.now() + file.originalname);
}
});

var upload = multer({ storage : storage});

最后是我的(简化的)发布路线

router.post("/profile",upload.single('photo'),middleware.isLoggedIn,function(req,res){
if(!req.file){
  console.log(req);
  console.log("Did not work");
}else{
  console.log(req.file);
  }
}
});

这里要求的是我正在使用的中间件

middlewareObject.isLoggedIn = function(req,res,next){
 if(req.isAuthenticated()){
   return next();
 }else{
  res.redirect("/login")
 }
}

任何人对什么地方可能有什么问题有任何想法?我认为这是multer无法成功上传图片的问题,但我似乎无法对其进行调试。

1 个答案:

答案 0 :(得分:0)

我尝试在本地运行您的代码,这似乎对我有用。这是我运行的代码段:

get(uid:string):AngularFireObject<AppUsers>{
return this.db.object('/users/'+uid);
}

我可以看到var storage = multer.diskStorage({ destination: function(req, file, callback) { callback(null, './uploads'); }, filename: function(req, file, callback) { console.log('File: ' + file) callback(null, Date.now() + file.originalname); } }); var upload = multer({ storage: storage }); app.get('/', function(req, res) { res.render('index.html'); }); app.post('/profile', upload.single('photo'), function(req, res) { if(!req.file) { console.log(req); console.log("Did not work"); } else { console.log(req.file); } }); 很好。我看到您正在使用中间件,是否也检查过中间件代码?另外,如果您还可以发布中间件代码段,也会有所帮助。