2015-11-13 50 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 
    }); 
});