Node:
实现以下一段验证类型的函数,
主要检验:
- 以及此文件是否存在
- 上传的文件是否为xlsx文件格式
- 文件大小<8M
- 前端中上传的表单name为 'xlsxfile'的文件
只有当条件均符合时才能通过校验返回True
值。
前提已知
- 使用multer中间件,上传的 file返回数据结构为:
#
const file = {
fieldname: 'xlsxfile',
originalname: 'Y~Z.xlsx',
encoding: '7bit',
mimetype:
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
destination: 'D:\\Code\\upload_TEMP',
filename: 'data.xlsx',
path: 'D:\\Code\\upload_TEMP\\data.xlsx',
size: 9848,
};
一般写法
- 憋一口气的写法:
import {existsSync} from 'fs';
const validate =(file)=>{
const xlsxMIME =
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
if(existsSync(file)&&file.mimetype===xlsxMIME&&file.size<=8*1024*1024&&file.fieldname!=='xlsxfile'){
return true;
}
return false;
}
- n连发if判断写法:
import {existsSync} from 'fs';
const validate =(file)=>{
const xlsxMIME =
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
if(!existsSync(file)){
return false;
}
if(file.mimetype!==xlsxMIME){
return false;
}
if(file.size>=8*1024*1024){
return false;
}
if(file.fieldname!=='xlsxfile'){
return false;
}
return true;
}
优雅的写法
使用 R.allPass 方法
import { existsSync } from 'fs';
const validate = (file) => {
const xlsxMIME =
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
const validRules = [
(file) => existsSync(file.path),
(file) => file.mimetype === xlsxMIME,
(file) => file.size<=8*1024*1024,
(file) => file.fieldname === 'xlsxfile'
];
return R.allPass(validRules)(file);
};