我们在开发过程中,经常会遇到附件读取、下载、查看等操作,但是有些系统的接口需要区分是那种文件的类型才能下载、查看等操作,这个时候我们就要区分附件的类型,看它的后缀名是多少就能处理请求对应的接口,但是在处理过程中,常常会遇到一些截取兼容性的问题,比如a.png,可以直接用split('.')就解决,但是这种1.a.png,a.aa.jpg, aa.bb.cc.zip这种就不能只用split()去处理了,处理的方式很多,看自己的处理方式而已,下面分享下我处理的方法,不喜勿喷,直接上代码
//返回值:fileName 原始全称文件名,emoverExtFileName 去除后缀的文件名,ext 文件后缀名
fileExtName(fileAllName){
let file = fileAllName;
let index = file.indexOf('.'); // .字符出现的位置
let num = 0; // ‘.’出现的次数
while(index !== -1) {
num++;
index = file.indexOf('.',index + 1);
}
console.log('.一共出现了' + num + '次');
if(num===1){//文件名只出现一次'.'符号
let parmsFile = fileAllName;
let getFileExtName = parmsFile.split('.')
let fileName = getFileExtName[0];
let extName = getFileExtName[1];
return {
fileName:fileAllName,
emoverExtFileName:fileName,
ext:extName
}
}else{//文件名只出现多次'.'符号
let parmsFile = fileAllName;
let getFileExtName = parmsFile.split('.')
let extName = getFileExtName[getFileExtName.length-1];
let fileName = '';
for (let i =0;i<getFileExtName.length;i++){
if(i===getFileExtName.length-1) break
fileName += getFileExtName[i]+'.'
}
fileName = fileName.substr(0,fileName.length-1)
return {
fileName:fileAllName,
emoverExtFileName:fileName,
ext:extName
}
}
}
运行结果:
1、文件名:a.png
2, 文件名:1.aaa.png
3、文件名:aa.bb.cc.png
4、文件名:3.a.zip