用HTML将file upload到Node.js

我正在尝试使用Node.js服务器来上传文件的API。 我得到undefined回应。

我正在按照这个教程https://www.youtube.com/watch?v=UtfZ-5WKpro

Node.js的:

 var express = require('express'); var app = express(); var bodyParser = require('body-parser'); app.use(bodyParser.json()); app.post("*", function(req, res) { res.end(JSON.stringify(req.files) + "\n"); }); console.log("Server at 8080"); app.listen(8080); 

HTML

 <html> <head> <form method="post" enctype="multipart/form-data" action="http://localhost:8080"> <input type="file" name="myimage" /> <input type="submit" name="submit" value="submit"/> </form> </head> </html> 

点击提交后,我得到了undefined响应。

 bodyParser.json() 

…所以你已经为JSON格式的请求build立了一个parsing器

  enctype="multipart/form-data" 

…但是你没有做出JSON格式的请求。

请参阅body-parser的文档 :

这并不处理多部门机构,因为它们的复杂性和典型的大的性质。 对于多部分机构,您可能对以下模块感兴趣:

随后是一系列build议。

select一个可以处理多部分请求的模块,并使用它来代替当前的select。

我build议你使用这个模块来处理Node / Express中的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 })); });