2015-11-13 53 views
1

请帮我解决这个问题。 我得到空值作为结果HTML + Node.js文件上传

HTML代码

<form method="post" enctype="multipart/form-data" action="/file-upload"> 
    <input type="text" name="username"> 
    <input type="password" name="password"> 
    <input type="file" name="thumbnail"> 
    <input type="submit"> 
</form> 

Node.js的

var express = require('express'); 
var http = require('http'); 
var request = require('request'); 
var bodyParser = require('body-parser');  

var app = express(); 
app.use(express.static(__dirname + '/app/')); 

// parse urlencoded request bodies into req.body 
app.use(bodyParser.urlencoded({ extended: true })); 

var server = app.listen(8080,function(){ 
console.log("Node.js image upload"); 
}); 

app.post('/file-upload', function(req, res, next) { 
console.log(req.body); 
console.log(req.files); 
res.writeHead(200, {'Content-Type': 'text/plain'}); 
res.end('Success\n'); 
}); 

回答

1

body-parser无法处理multipart/form-data的

你应该使用类似multerbusboy

处理的multipart/form-data的需要一些复杂的逻辑,每包处理它有很多的设置

1

你遇到因为在形式enctype="multipart/form-data"问题。您将需要安装multer包来处理这些问题。

基本用法是这样的:

//Include the package 
var multer = require('multer'); 
var uploadTmp = multer({ dest: 'uploads/' }); 

// Use a middleware to handle files 
app.post('/file-upload',uploadTmp.single('thumbnail'), function(req, res, next) { 
1

您可以使用NPM模块formidable以服务的形式多数据。以下是一个例子:

app.post('/file-upload', function(req, res, next) { 
    var form = new formidable.IncomingForm(); 
    form.parse(req, function(err, fields, files) { 
    console.log('form parse'); 
    }); 

form.on('field',function(name,value){ 
    console.log('in field',name,value);//gives you the field names with value 
    }); 
    form.on('file',function(name,value){ 
    console.log('in file'); 
    }); 

    form.on('end', function(fields, files) { 
    this.openedFiles[x].path; //gives the file path 
    }); 
});