用node.js上传文件

我有这个代码为了上传文件与node.js:

app.use(express.bodyParser()); // or, as `req.files` is only provided by the multipart middleware, you could // add just that if you're not concerned with parsing non-multipart uploads, // like: app.use(express.multipart()); app.get('/',function(req,res){ fs.readFile('uploadHTML.html',function (err, data){ res.writeHead(200, {'Content-Type': 'text/html','Content-Length':data.length}); res.write(data); res.end(); }); }); app.post('/upload',function(req,res) { console.log(req.files); fs.readFile(req.files.displayImage.path, function (err, data) { // ... var newPath = __dirname; fs.writeFile(newPath, data, function (err) { res.redirect("back"); }); }); }); 

这是HTML文件:

 <html> <head> <title>Upload Example</title> </head> <body> <form id="uploadForm" enctype="multipart/form-data" action="/upload" method="post"> <input type="file" id="userPhotoInput" name="displayImage" /> <input type="submit" value="Submit"> </form> <span id="status" /> <img id="uploadedImage" /> </body> </html> 

当我上传文件,它给了我下一个错误:

 TypeError: Cannot read property 'displayImage' of undefined at c:\NodeInstall\nodejs\express.js:42:22 at callbacks (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:164:37) at param (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:138:11) at pass (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:145:5) at Router._dispatch (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:173:5) at Object.router (c:\NodeInstall\nodejs\node_modules\express\lib\router\index.js:33:10) at next (c:\NodeInstall\nodejs\node_modules\express\node_modules\connect\lib\proto.js:193:15) at Object.expressInit [as handle] (c:\NodeInstall\nodejs\node_modules\express\lib\middleware.js:30:5) at next (c:\NodeInstall\nodejs\node_modules\express\node_modules\connect\lib\proto.js:193:15) at Object.query [as handle] (c:\NodeInstall\nodejs\node_modules\express\node_modules\connect\lib\middleware\query.js:45:5) 

可能是什么原因?

我build议你使用真棒模块https://github.com/domharrington/fileupload处理file upload在节点/快递。

 var fileupload = require('fileupload').createFileUpload('/uploadDir').middleware app.post('/upload', fileupload, function(req, res) { // files are now in the req.body object along with other form fields // files also get moved to the uploadDir specified }) 

上传文件的另一种方法是使用类似这样的东西

玉模板

 form.data(action='/user/register', method='post', class="long-fields", enctype='multipart/form-data') input(type="text" name="name") input(name='fileLogo', type='file') input(type="submit" value="Register") 

调节器

 formidable = require('formidable'); //file upload handling via form uuid = require('node-uuid'); //Unique ID path = require('path'); //Path compiler fs = require('fs'); //FileSystem var form = new formidable.IncomingForm(); form.keepExtensions = false; form.maxFieldsSize = 2 * 1024 * 1024; //2mb form.parse(req, function(err, fields, files) { console.log(fields); console.log(files); fs.readFile(files.fileLogo.path, function (err, data) { var pathNew = __dirname + '/../../uploads/' + uuid.v1() + path.extname(files.fileLogo.name) fs.writeFile(pathNew, data, function (err) { console.log('uploaded', pathNew); }); }); res.send(jade.renderFile( settings.pathLess + prefix + '/register.jade', { req : req })); });