【问题标题】:Multer returning req.file as undefined when uploading a single file上传单个文件时,Multer 返回 req.file 为未定义
【发布时间】:2018-07-14 19:19:30
【问题描述】:

我已经广泛浏览了有关此主题的先前问题,但解决这些问题的方法通常涉及没有 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>

这是 multer 设置

//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 没有成功上传图像的问题,但我似乎无法调试它。

【问题讨论】:

    标签: javascript express multer


    【解决方案1】:

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

    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);
        }
    });
    

    我可以看到req.file 很好。我看到您正在使用中间件,您是否也检查过您的中间件代码?此外,如果您也可以发布您的中间件 sn-p 也会有所帮助。

    【讨论】:

    • 感谢您在本地运行它。也许它确实与我的中间件有关。我将中间件文件中的代码添加到原始帖子中。
    • 为了理智,如果您删除中间件,它对您有用吗?
    • 我从我的 POST 路由中删除了中间件,但它没有工作,所以问题可能与此无关。
    • 那么我可能需要查看整个文件。可能还有其他事情发生。
    • 另外,您可能不会做的一件事是不使用body-parser。这就是我正在做的事情:` const bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({extended: false })); `
    猜你喜欢
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2020-09-20
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多