node.js如何上传图片

现在看的是node.js实战这本书,书上说bodyParser()更具体的说是multipart()中间件他会给你一个req.files对象,代表上传的对象。
我照着书上的代码敲的,结果总是undefined,Cannot read property ‘photo’ of undefined。搜了下body-parser,看到上面写着
This does not handle multipart bodies, due to their complex and typically large nature.
For multipart bodies, you may be interested in the following modules:
意思是不是body-parser模块不再支持multipart。
下面app.js有代码:

var bodyParser = require('body-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.set('photos',__dirname+'/public/photos');
app.get('/upload',photos.form);
app.post('/upload',photos.submit(app.get('photos')));

photo.js里有代码:

var Photo = require('../models/Photo')
var path = require('path')
var fs = require('fs')
var join = path.join
exports.list = function (req, res) {
   Photo.find({ }, function (err, photos) {
       if(err) return next(err)
       res.render('photos',{
           title:'Photos',
           photos:photos
       })
   })
}

exports.form = function (req,res) {
    res.render('photos/upload',{
       title:'Photo upload'
    });
}

exports.submit = function (dir) {
    return function (req, res, next) {
        var img = req.files.photo.image
        var name = req.body.photo.name||img.name
        var path = join(dir, img.name)
        fs.rename( img.path, path, function (err) {
            if( err ) return next(err)

            Photo.create({
                name:name,
                path:img.name
            },function (err) {
                if(err) return next(err)
                res.redirect('/')
            })
        })
    }
}
阅读 2.1k
1 个回答

body-parser 不能够处理 multipart/form-data 了。需要使用 multer 中间件。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题