背景:使用multer中间件存储上传文件到本地,自定义本地储存文件名为上传文件,因此对当前文件夹是否有重复文件名进行了判断,然后就出现上传会提示文件名重复,但后续操作都会卡住的问题
请教问题出在哪里?
现象:
1.上传文件,此时本地已有相同文件名文件,因此返回文件名重复
2.后续操作卡住,但服务器未崩溃,只是当前连接卡住
3.问题是为什么只有判断文件名是否重复的部分导致当前连接卡住,但判断文件大小和类型则不会
4. 代码如下
const upload = (req,res,next) => {
const fullpath = path.join(__dirname,'../../',"/resources/static/upload/",tool.getDate().split(' ')[0])
const storage = multer.diskStorage({
destination: fullpath,
filename:(req,file,cb)=>{
//解决中文乱码
file.originalname = Buffer.from(file.originalname,'latin1').toString('utf-8')
cb(null,file.originalname)
}
})
const upFile = multer({storage,fileFilter(req,file,cb){
const size = parseInt(req.headers["content-length"])
var type = file.mimetype
var filename = Buffer.from(file.originalname,'latin1').toString('utf-8')
var tname = path.join(fullpath,filename)
// 此处判断本地文件夹是否有相同文件名文件
if(fs.existsSync(tname)) {
var mulErr = new multer.MulterError()
mulErr.message = '文件名重复'
return cb(mulErr,false)
}
var index = filename.lastIndexOf('.')
var suffixName = filename.slice(index)
const regPdf = /.(ppt|pptx|pdf)$/
const regDoc = /.(doc|docx)$/
if(type.match('image')) {
if(size>1024*1024*10) {
var mulErr = new multer.MulterError()
mulErr.message = '单张图片大小不得超过10M'
return cb(mulErr,false)
}
return cb(null,true)
}
else if(type.match('video')) {
if(size>1024*1024*1024*2) {
var mulErr = new multer.MulterError()
mulErr.message = '视频大小不得超过2G'
return cb(mulErr,false)
}
return cb(null,true)
}
else if(regDoc.test(suffixName)) {
if(size>1024*60) {
var mulErr = new multer.MulterError()
mulErr.message = '单份文档大小不得超过60k'
return cb(mulErr,false)
}else{
return cb(null,true)
}
}
else if(regPdf.test(suffixName)) {
if(size>1024*1024*20) {
var mulErr = new multer.MulterError()
mulErr.message = '简报大小不得超过20M'
return cb(mulErr,false)
}
return cb(null,true)
}else {
var mulErr = new multer.MulterError()
mulErr.message = '不接受该格式文件!'
return cb(mulErr,false)
}
}.single("file")
upFile(req,res,(err)=>{
if(err) {
return next(err)
}else {
res.status(200).send({
time:tool.getDate(),
info:{
'filename':req.file.filename,
'path':req.file.path
},
msg:req.file.filename+'文件上传成功'
})
}
})
}