如何在Node.js中上传图像

时间:2014-05-31 15:56:32

标签: javascript node.js

我是完整的新手到Node.js.我只是想学习上传和使用ajax显示图像像我在php.I发现大多数教程对我来说很难。要开始我尝试使用此代码

var express = require("express");
var app = express()
var bodyParser = require('body-parser')


//all environment
app.use(bodyParser())



var form = "<!DOCTYPE HTML><html><body>" +
"<form method='post' action='/upload' enctype='multipart/form-data'>" +
"<input type='file' name='image'/>" +
"<input type='submit' /></form>" +
"</body></html>";

app.get('/', function (req, res){
    res.writeHead(200, {'Content-Type': 'text/html' });
    res.end(form);

});
/// Post files
app.post('/upload', function(req, res) {
    console.log('Hello world');
       console.log(req.files);
});


app.listen(8080)

但是我为了req.files而得到了理解。任何人都告诉我们为什么?。请原谅我,如果这是一个愚蠢的问题。还有一些资源帮助。谢谢你提前。

2 个答案:

答案 0 :(得分:2)

req.files适用于快递v3,您使用的是v4。

现在,body-parser只处理urlencoded和json主体。 对于多部分机构,您应该使用替代方案。

https://github.com/expressjs/body-parser

例如multer:

var express = require('express')
var multer  = require('multer')

var app = express()
app.use(multer({ dest: './uploads/'}))

/// Post files
app.post('/upload', function(req, res) {
    console.log('Hello world');
    console.log(req.files);
});

app.listen(8080)

答案 1 :(得分:1)

使用快递4,busboy是处理上传图像的绝佳方式。我们来看一下减少example from Miaou

exports.appPostUpload = function(req, res){
    var busboy = new Busboy({ headers: req.headers }), files=[];
    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
        var chunks = [];
        file.on('data', function(chunk) {
            chunks.push(chunk);             
            // todo : abort if sum of chunk.lengths is too big (and tell the client he's fat)
        });
        file.on('end', function() {
            files.push({name:fieldname, bytes:Buffer.concat(chunks)});
        });
    }).on('finish', function() {
        if (!files.length) {
            return res.send({error:'found nothing in form'});
        }
        // we can now work with the items in `files` like you normally would.
    });
    req.pipe(busboy);       
}