nodejs express 框架 上传图片,上传头像问题

上传图片总结:

必须 安装’multer’模块
Npm I multer –S(手动输入小写)

第一步
App.js 里面 挂载index路由之前写入

app.use(express.static(path.join(__dirname, 'public')));
var multer = require('multer'); //删除图片临时放在'/tmp/'
app.use(multer({ dest: '/tmp/'}).array('image')); //必须与表单的name名字相同,表单的上传图片的input的name必须是array后面的内容

第二步:
users路由下面,引入path 和 fs 上传图片模块 multer

var fs = require('fs');
var path = require('path');
var multer = require('multer');//安装上传图片模块

//用户头像 上传 渲染页面

router.get('/article', function (req, res) {
  res.render('article', {
    title: "上传头像",
  })
})

//上传头像接口

router.post('/file_upload', function (req, res) {
  console.log(req.files) //上传的路径../public/images/ue/
  var des_file = path.join(__dirname, "../public/images/ue/" + req.files[0].originalname);
  console.log(des_file);
  fs.readFile(req.files[0].path, function (err, data) {
    fs.writeFile(des_file, data, function (err) {
      if (err) {
        console.log(err);
      } else {
        res.redirect('/users/article');
      }
    });
  });
})

第三步:
前端页面:

文件上传:

选择一个文件上传:
  <form action="/users/file_upload" method="post" enctype="multipart/form-data">
    <input type="file" name="image" />
    <br />
    <input type="submit" value="上传文件" />
  </form>

如果把图片上传到数据库当中,参考以下代码

//上传头像接口
router.post('/file_upload', function (req, res) {
  var uid = new ObjectID(req.session.uid);
  // console.log(req.session.uid)
  var des_file = path.join(__dirname, "../public/images/ue/" + req.files[0].originalname);
  // console.log("/images/ue/" + req.files[0].originalname);
  fs.readFile(req.files[0].path, function (err, data) {
    fs.writeFile(des_file, data, function (err) {
      if (err) {
        console.log(err);
      } else {
        dbConnect('users').then(function({coll,dbCon}){
          var imgurl = "/images/ue/" + req.files[0].originalname;
          // console.log(imgurl);
          var whereStr = {_id:uid};//查询条件
          var updateStr = {$set: { "imgurl" : imgurl }};
          coll.updateOne(whereStr, updateStr,  function(err, data) {
            if (err) throw err;
            console.log("更新成功");
        });
        dbCon.close();
        }).catch(function(err){
          console.log(err);
        })   
        res.redirect('/users/person');
      }
    });
  });
})

封装了一个连接数据库的函数 dbConnect

封装连接数据库如下


var MongoClient = require('mongodb').MongoClient;
// console.log(MongoClient);
var dbpath = 'mongodb://localhost:27017';
var dbName = 'zzblog';

function  dbConect(collectName){
    var p = new Promise(function(resolve,reject){
        MongoClient.connect(dbpath,function(err,dbCon){
            if(err) reject(err);
            var db = dbCon.db(dbName);

            db.collection(collectName,function(err,coll){
                if(err) reject(err);
                resolve({coll,dbCon})
            })
        
          })
    })
    return p;
   
  }

  module.exports = dbConect;

猜你喜欢

转载自blog.csdn.net/D321xiaoding/article/details/83659132