关于使用Multer(1.0.6)和Express来上传文件

我想使用Muller从表单上传图片。

我find一个关于如何使用multer上传文件的post ,并触发事件来重命名文件。 不过,我发现它只适用于旧版本(multer-0.1.6)

在multer的github的最新指令中,我想我必须使用disk storage engine来上传新名称的文件,但是它不起作用。 请给我一些指示,我整天试过这个function…

此外,我不知道为什么res.status(204).end(); 需要吗? 二,不要添加这一行,网页将始终locking,当我点击上传button…

的package.json

 { "name": "FileUpload", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.13.2", "cookie-parser": "~1.3.5", "debug": "~2.2.0", "express": "~4.13.1", "jade": "~1.11.0", "morgan": "~1.6.1", "multer": "^1.0.6", "serve-favicon": "~2.3.0" } } 

upload.js

 var express = require('express'); var multer = require('multer'); var upload = multer({ storage: storage }); var app = express(); app.post('/uploadImage', upload.single('image'), function (req, res, next) { console.log("success"); console.log(req.file); res.status(204).end(); }); app.get('/',function(req,res){ console.log("It's work"); res.sendFile(__dirname + "/index.html"); }); var storage = multer.diskStorage({ destination: function (req, file, cb) { console.log("Dest"); cb(null, 'uploads/') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }); app.listen(3000,function(){ console.log("Working on port 3000"); }); 

的index.html

 <form id = "uploadForm" enctype = "multipart/form-data" action = "/uploadImage" method = "post" > <input type="file" name="image" /> <input type="submit" value="Upload Image" name="submit"> </form> 

解决scheme为什么我的代码无法运行的原因是代码的顺序…下面的顺序是正确的。

 var express = require('express'); var multer = require('multer'); var app = express(); app.get('/',function(req,res){ console.log("It's work"); res.sendFile(__dirname + "/index.html"); }); var storage = multer.diskStorage({ destination: function (req, file, cb) { console.log("Dest"); cb(null, 'uploads/') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }); var upload = multer({ storage: storage }); app.post('/uploadImage', upload.single('image'), function (req, res, next) { console.log("success"); console.log(req.file); res.status(204).end(); }); app.listen(3000,function(){ console.log("Working on port 3000"); }); 

在GitHub中,你可以find这个例子,对我来说它的工作:

 var express = require('express'); var multer = require('multer'); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/tmp/my-uploads') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }) var upload = multer({ storage: storage }) var app = express(); app.post('/uploadImage', upload.single('image'), function (req, res, next) { console.log("success"); console.log(req.file); res.status(204).end(); });