使用Express上传文件(node.js)

时间:2014-04-24 21:37:21

标签: node.js file-upload express

我试图使用node.js和express 4.0.0创建一个非常简单的文件上传服务器。根据{{​​3}}我认为我应该得到" req.files",但它不存在(未定义)。

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

有些网站建议添加&#34; app.use(bodyParser)&#34;和#34; app.configure()&#34;。据我所知,&#34; app.configure&#34;已从快递4.0.0中删除。

为什么不存在req.files?

2 个答案:

答案 0 :(得分: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);
    }
};

答案 1 :(得分:0)

最近大多数中间件都是taken out of Express

您需要包含中间件来填充req.files - 类似于connect-multiparty

在您的模块导入中包含var multiparty = require('connect-multiparty');,在您拥有app后,添加app.use(multiparty());的中间件。

确保清理临时文件,并且可能只将多方作为中间件传递给明确将上传的路由。