文件上传Express MongoDB Multer

时间:2018-01-12 19:15:48

标签: node.js mongodb express multer

我正在尝试将图片上传到Express Rest Api。我正在使用Multer来解析multipart / form图像。我想知道在服务器或数据库中保存图像的最佳做法。我怎么能用Multer来实现这个目标。

用户模型:

var mongoose = require('mongoose');
var userSchema = mongoose.Schema({
    email: {
        type: String,
        required: true
    },
    avatar: {
        data: Buffer,
        contentType: String
    }
});
var User = module.exports = mongoose.model('user', userSchema, 'user');
module.exports.addUser = function(user, callback) {
    User.create(user, callback);
};

用户路由器:

import multer from 'multer';
var upload = multer({ dest: 'uploads/' })

import User from '../models/user.js';
router.post('/register', upload.single('avatar'), (req, res) => {           
    var user = req.body;
    user.avatar = req.file;   //img file in the req.file
    User.addUser(user, (err, user) => {
        if(err) throw err;
        res.json({
            success: true,
            user: user
        });
    })
});

这不会给我带来任何错误,但图像没有上传到数据库。任何帮助,将不胜感激。 (该文件位于服务器上的上传目录中,具有7位编码)

1 个答案:

答案 0 :(得分:1)

如果要将图像直接存储到数据库中,则必须使用fs.readFileSync将图像作为二进制文件然后保存,请注意req.file.path返回上传文件的完整路径:

var user = req.body;
user.avatar.data = fs.readFileSync(req.file.path);
user.avatar.contentType = req.file.mimetype;

User.addUser(user, (err, user) => {
    ...
});

请注意,将图片存储为代表其网址的字符串可能比使用第一种方法更好,更轻松,请阅读此post以获取更多信息