场景:使用antd的Upload上传文件前判断文件类型,只允许上传指定类型文件
由于要判断.amr类型的音频,一开始的写法:
beforeUpload = file => {
const isLt2M = file.size / 1024 / 1024 < 2;
const isValid = file.type === "audio/amr";
if (!isValid) {
message.warn("上传失败,请选择.amr格式");
}
if (!isLt2M) {
message.warn("上传失败,大小不能超过2M");
}
return isValid && isLt2M;
}
但是反映文件类型错误。原因是file.type
只能识别常见类型的文件格式,不常见的文件类型会返回空字符串,最好不要依赖这个属性作为唯一验证方案。
后来改成通过文件后缀判断。
// 获取文件后缀
getFileSuffix = name => {
const index = name.lastIndexOf(".");
const len = name.length;
return name.substring(index, len) || "-";
};
beforeUpload = file => {
const suffix = this.getFileSuffix(file.name);
const isLt2M = file.size / 1024 / 1024 < 2;
const isValid = suffix === ".amr";
if (!isValid) {
message.warn("上传失败,请选择.amr格式");
}
if (!isLt2M) {
message.warn("上传失败,大小不能超过2M");
}
return isValid && isLt2M;
}