multer中间件

1.Multer是node.js的一个中间件,用于处理multipart/form-data类型的表单数据,它主要用于上传文件。(Multer不会处理任何非multipart/form-data类型的表单数据)
2.Multer的使用:
1)Multer会添加一个body对象以及file或files对象到express的request对象中,body对象包含表单的文本域信息,file或files对象包含对象表单上传的文件信息。
2)基本使用方法:
//引入multer模块,主要应用于图片或文件的上传
const multer = require("multer");
//第一件事情 读文件     将文件放在指定的区域
//第二件事件 更改文件名称

//配置项
var storage = multer.diskStorage({  
    //将上传的文件存储在指定的位置
    destination: function (req, file, cb) {
       //浏览器在执行项目时,会从public文件夹开始,所以将图片保存在项目中时的路径是以public文件夹开始的
      cb(null, './public/img')
    },
    //将上传的文件做名称的更改
    filename: function (req, file, cb) {
       //file.originalname保存着图片的名称
      cb(null,  Date.now()+"-"+file.originalname);//在图片名称的前面加上时间戳,以防上传同一张图片时会被覆盖
    }
  })

var upload = multer({ storage: storage })
//指定当前字段可以携带多少个文件
//name的属性值需要和formData.append("logo",logo[0].files[0]);中定义的属性名相同
//maxCount表示最多可以携带多少个文件
var cpUpload = upload.fields([{ name: 'logo', maxCount: 1 }])

//导出配置项
module.exports = {
    cpUpload
}
3)服务器接收formData信息:
    //req.files中保存着存入图片的所有信息(一个对象,键为存入服务器的key值:logo,值为一个数组),req.files.logo为一个数组,里面包含着图片的所有信息
    //req.files.logo[0].path保存着图片在本项目中的绝对路径(public\\img\\1.jpg),但是需要将其转换为http://localhost:3000/public\img\1.jpg的形式
    let path = req.files.logo[0].path;
    var reg = /public\\img\\(.+)/;//在服务端中解析\不能使用\\,(.+)中.表示任意字符,+表示1到多个字符
    var newPath = path.replace(reg,($0,$1)=>{
        //$0表示匹配整个正则,$1表示reg中第一个括号里的内容,如果有$2则表示reg中的第二个括号的内容
        var str = "http://localhost:3000/img/";//此时的图片是以detail.html起点开始找的,所以前面的路径应该要把public去掉,直接找到img文件夹,不然图片的路径会寻找不到
        return str += $1;
    })

 

posted @ 2019-03-16 20:14  leslie-cheung  阅读(333)  评论(0编辑  收藏  举报