2016-11-08 49 views
1

我在嘗試使用Node.js服務器上傳文件的API。我得到undefined的迴應。用HTML上傳文件到Node.js

我下面這個教程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響應後。

回答

5
bodyParser.json() 

...所以你已經設置了一個解析器JSON格式的請求

enctype="multipart/form-data" 

...但你是不是做一個JSON格式的請求。

the documentation for body-parser

這不處理多機構,由於其複雜的,通常大的性質。對於多部分機構,您可能對以下模塊感興趣:

...其後是建議列表。

選擇一個可處理多部分請求並使用該模塊的模塊,而不是您當前的選擇。

1

我建議您使用this module來處理Node/Express中的文件上載。

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 
    })); 

});