NodeJS Multer没有工作

我试图用NodeJS + ExpressJS + Multer上传文件,但是不能正常工作。

我的ExpressJS版本是4.12.3

这是我的来源

server.js:

var express = require('express'), multer = require('multer'); var app = express(); app.use(express.static(__dirname + '/public')); app.use(multer({ dest: './uploads/'})); app.post('/', function(req, res){ console.log(req.body); // form fields console.log(req.files); // form files res.status(204).end() }); app.get('/', function(req, res) { res.sendFile('public/index.html'); }); app.listen(5000, function() { console.log("start 5000"); }); 

公共/ index.html的:

 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <form method="post" enctype="multipart/form-data"> <input id="file" type="file"/> <button type="submit">test</button> </form> </body> </html> 

当我点击提交button时,我的NodeJS控制台login:

 "C:\Program Files\nodejs\node.exe" server.js start 5000 {} 

在NodeJS控制台上,req.files上有空对象我的源是否有一些问题?

我没有看到你调用任何API上传文件点击提交button。 让我动议全面实施。

app.js中的configuration

 app.use(multer({ dest: './uploads/', rename: function (fieldname, filename) { return filename.replace(/\W+/g, '-').toLowerCase() + Date.now() }, onFileUploadStart: function (file) { console.log(file.fieldname + ' is starting ...') }, onFileUploadData: function (file, data) { console.log(data.length + ' of ' + file.fieldname + ' arrived') }, onFileUploadComplete: function (file) { console.log(file.fieldname + ' uploaded to ' + file.path) } })); 

视图

 <form id="uploadProfilePicForm" enctype="multipart/form-data" action="/user/profile_pic/upload" method="post"> <input type="file" multiple="multiple" id="userPhotoInput" name="userPhoto" accept="image/*" /> <input type="submit" name="submit" value="Upload"> </form> 

终点“ /user/profile_pic_upload ”POST在控制器中调用uploadProfilePic

上传用户控制器中的configuration文件图片

 uploadProfilePic = function(req,res){ // get the temporary location of the file var tmp_path = req.files.userPhoto.path; // set where the file should actually exists var target_path = '/Users/narendra/Documents/Workspaces/NodeExpressWorkspace/MongoExpressUploads/profile_pic/' + req.files.userPhoto.name; // move the file from the temporary location to the intended location fs.rename(tmp_path, target_path, function(err) { if (err) throw err; // delete the temporary file, so that the explicitly set temporary upload dir does not get filled with unwanted files fs.unlink(tmp_path, function() { if (err) { throw err; }else{ var profile_pic = req.files.userPhoto.name; //use profile_pic to do other stuffs like update DB or write rendering logic here. }; }); }); }; 

尝试这个

 var multer = require('multer') var storage = multer.diskStorage({ destination: function (request, file, callback) { callback(null, './uploads/'); }, filename: function (request, file, callback) { console.log(file); callback(null, file.originalname) } }); var upload = multer({ storage: storage }); app.post('/', upload.single('photo'), function (req, res) { console.log(req.body) // form fields console.log(req.file) // form files res.status(204).end() }); 

ref: http : //wiki.workassis.com/nodejs-express-get-post-multipart-request-handling-example/