2014-04-24 93 views
1

我正在嘗試使用node.js製作一個非常簡單的文件上傳服務器,並且表達爲4.0.0。據http://howtonode.org/really-simple-file-uploads我認爲我應該得到「req.files」,但它不存在(是未定義的)。使用Express上傳文件(node.js)

var express = require('express') 
var fs = require('fs') 
var app = express() 

app.get('/', sendForm) 
app.post('/upload', uploadFile) 
app.listen(8000) 

function sendForm(req, res) 
{ 
    // a form with a <input type="file"> 
    res.send('<!doctype html><html><head></head><body><form action=\"/upload\" method=\"post\" enctype=\"multipart/form-data\"><input type=\"file\" name=\"displayImage\"><button type=\"submit\">submit</button></form></body></html>') 
} 

function uploadFile(req, res) 
{ 
    console.log(req.files) // prints undefined 
    res.redirect('back') 
} 

一些網站建議添加「app.use(bodyParser)」,並通過「app.configure()」調用。據我所知,「app.configure」已從Express 4.0.0中刪除。

爲什麼不存在req.files?

回答

1

我發現Formidabble容易的工作,這是你將如何使用它:

var formidable = require('formidable'); 
var fs   = require('fs'); 

module.exports.upload = function (req, res, next) { 
    var form = new formidable.IncomingForm(); 

    form.parse(req, function(err, fields, files) { 
     if ('file' in files) { 
      var file = files['file']; 

      // Do something with file 

      module.exports._deleteFiles(files); 
      res.send(200); 
     } else { 
      module.exports._deleteFiles(files); 
      res.send(400); 
     } 
    }); 
}; 

module.exports._deleteFiles = function (files) { 
    // Delete temporary files 
    for (var f in files) { 
     fs.unlink(files[f].path); 
    } 
}; 
0

最近大部分中間件是taken out of Express

您需要包含中間件才能填充req.files - 類似connect-multiparty

包含var multiparty = require('connect-multiparty');與您的模塊導入,並且在您有app後,添加與app.use(multiparty());中間件。

請確保清理臨時文件,並且可能僅將多方作爲中間件傳遞給明確需要上載的路由。

相關問題