一个笨蛋前端

好好学习,天天向上

express中上传 中间件multer 使用方法

github地址

基本用法 (转自github)

var express = require('express');
var router = express.Router();
var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })//文件位置
app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file 是 `avatar` 文件的信息
  // req.body 将具有文本域数据, 如果存在的话
})

app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
  // req.files 是 `photos` 文件数组的信息
  // req.body 将具有文本域数据, 如果存在的话
})

var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/cool-profile', cpUpload, function (req, res, next) {
  // req.files 是一个对象 (String -> Array) 键是文件名, 值是文件数组
  //
  // 例如:
  //  req.files['avatar'][0] -> File
  //  req.files['gallery'] -> Array
  //
  // req.body 将具有文本域数据, 如果存在的话
})

storage使用磁盘存储引擎

var multer  = require('multer')
//定义storage
var storage = multer.diskStorage({
  destination: function (req, file, cb) {//设置上传后文件路径,uploads文件夹会自动创建
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {//给上传文件重命名,获取添加后缀名
    cb(null, file.fieldname + '-' + Date.now())
  }
})
//实例化upload
var upload = multer({
storage: storage,
fileFilter: (req, file, cb)=> { //过滤一些文件格式
            var filename = file.originalname;
            var reg = /^.*?\.(csv|xls|xlsx|docx|doc)$/i;
            var bool = filename.match(reg);
            console.log(bool)
            if (bool) {
                cb(null, true)
            } else {
                cb("类型错了", false);
            }
        },
}).single('file')//上传表单的name

app.post('/cool-profile', upload, function (req, res, next) {
})

也可以这么用 就可以拿到req的参数了 进行重命名了

router.post('/upload', (req, res) => {
    var schoolCode = req.query.code
    var userinfo = res.locals.userinfo;
    var storage = multer.diskStorage({
        //设置上传后文件路径,uploads文件夹会自动创建。
        destination: (req, file, cb)=> {
            cb(null, './public/upload')
        },
        //给上传文件重命名,获取添加后缀名
        filename: (req, file, cb)=> {
            var fileFormat = (file.originalname).split(".");
            // cb(null, userinfo.userInfo.userId + '_' + fileFormat[0] + '_' + "schoolcode" + "." + fileFormat[fileFormat.length - 1]);
            cb(null, userinfo.userInfo.userId + '=' + schoolCode + '=' + fileFormat[0] + "." + fileFormat[fileFormat.length - 1]);
        }
    });
    var upload = multer({
        storage: storage,
        fileFilter: (req, file, cb)=> {
            var filename = file.originalname;
            var reg = /^.*?\.(csv|xls|xlsx|docx|doc)$/i;
            var bool = filename.match(reg);
            console.log(bool)
            if (bool) {
                cb(null, true)
            } else {
                cb("类型错了", false);
            }
        }
    }).single('file');
    upload(req, res, (err)=> {
        if (err) {
            res.send('上传失败 当前仅支持 csv,xls,xlsx,doc,docx')
        }
        res.send("上传成功");
        // Everything went fine
    })
});
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注