验证中...
开源中国 2018 年度最后一场技术盛会邀你来约~错过就要等明年啦!点此立即预约
语言: JavaScript
分类: JavaScript 工具
最后更新于 2018-12-09 10:09
express 使用 multer 进行文件上传的,自定义文件后缀过滤和异常捕获。
原始数据 复制代码
const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
const app = express();
const fileBasePath = 'public/uploads/';
app.use(bodyParser.urlencoded({extended:true}));
/**
* @name checkFileExt
* @description 检查文件后缀是否满足要求
* @param {Boolean} allow // 描述规则是 allow 还是 deny
* @param {String} rule // 规则字符串
* @param {String} ext // 文件后缀名
*/
function checkFileExt(ext,allow=true,rule='png|jpeg|bmp|svg|jpg'){
if(!ext) return false;
if(allow) return rule.includes(ext);
return !rule.includes(ext);
}
const storage = multer.diskStorage({
destination:fileBasePath+new Date().getFullYear()+""+(new Date().getMonth()+1) +""+ new Date().getDate(),
filename(req,file,cb){
const name = file.originalname.split('.');
cb(null,Date.now()+Math.random()+'.'+name[name.length-1]);
},
});
/**
* @name fileFilter
* @description 文件过滤方法
* @param {*} req
* @param {*} file
* @param {*} cb
*/
function fileFilter(req,file,cb){
let ext = file.originalname.split('.');
ext = ext[ext.length-1];
// 检查文件后缀是否符合规则
if(checkFileExt(ext,true)){
cb(null,true);
}else{
// 不符合规则,拒绝文件并且直接抛出错误
cb(null,false);
cb(new Error('文件类型错误'));
}
}
app.use('/index',express.static('./views/index.html'));
const baseUpload = multer({storage,fileFilter});
const upload = baseUpload.single('file');
/**
* @name uploadMiddleware
* @description 文件上传中间件
* @param {*} req
* @param {*} res
* @param {*} next
*/
function uploadMiddleware(req,res,next){
upload(req,res,(err)=>{
if(err){
// 进行错误捕获
res.json({code:-1,msg:err.toString()});
}else{
next();
}
});
}
app.post('/',uploadMiddleware,(req,res)=>{
let savePath = req.file.path.replace(/\\/g,'/').replace(fileBasePath,'');
res.send(savePath);
});
app.listen(3000);

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助