我已经仔细阅读了有关该主题的先前问题,但是解决这些问题的方法通常是使用不带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无法成功上传图片的问题,但我似乎无法对其进行调试。
答案 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);
}
});
很好。我看到您正在使用中间件,是否也检查过中间件代码?另外,如果您还可以发布中间件代码段,也会有所帮助。