2017-09-01 25 views
0

我試圖用multer來上傳圖片到MySQL數據庫,以及我得到一個錯誤,說明Req.File.Path未定義

TypeError: Cannot read property 'path' of undefined

我App.js

var multer = require('multer'); 
app.use(express.static("public")); 
app.post("/updateImage/add",multer({ dest: './public/uploads/'}).single('img') ,contentUpdate.addImage); 

我contentUpdate.js

exports.addImage = function(req, res) { 
    var path = (req.file.path).replace("public/", ''); 
    console.log(path); 
    var data = 
     {     
      image: path 
     }; 

var URLs = data.PageURL; 
connection.query('INSERT INTO `updatedimages` SET ?', [data], function(err, rows) 
{ 
    if (err) 
    { 
     console.log(err); 
    } else 
    { 
     req.flash('success','Entry Successful'); 
     return res.redirect(URLs); 
    } 
}); 
}; 

我updateImage.handlebars

<form id="myForm" action='/updateImage/add' method='POST' > 
    <div class="col-md-12" > 
    <input name='img' type="file" class="form-control" required/> 
</div> 
<div> 

    <button type="submit" class="glyphicon glyphicon-submit btn btn-primary "> 

    </div> 

+0

檢查req.files(不是文件)包含任何數據? –

回答

0

您需要設置正確的編碼類型的HT ML:

<form id="myForm" action='/updateImage/add' method='POST' enctype='multipart/form-data'> 

即使如此,這是一件好事,也驗證輸入:

if (! req.file || ! req.file.path) { 
    return res.sendStatus(400); 
} 
+0

@ robertklep發現只要我上傳了這個問題,但是謝謝! – Tyron

+0

@Tyron我相信你應該把這個標記爲答案,以便SO的其餘部分知道:P – zerohero

0

更改如下:

<input name='img' type="file" class="form-control" required/> 

<input name='file' type="file" class="form-control" required/> 

然後再試試:

app.post("/updateImage/add",multer({ dest: './public/uploads/'}).single('file') ,contentUpdate.addImage); 
+1

謝謝你的回答,但我也注意到我的for缺少enctype =「multipart/form-data」,這似乎解決了這個問題。 :D – Tyron