js校验错误图片

前端上传图片文件时,可能收到上传非图片文件,前端需要对其进行判断。

1、根据文件名判断

    uploadFile(file){
      // 截取文件后缀
      const fileSuffix = file.name.split('.').pop();
      // 转成小写,判断是否正确格式
      const isImage = ['jpg', 'jpeg', 'png'].includes(fileSuffix.toLowerCase());
      if (!isImage) {
        this.$Message.error(file.name + '上传失败,只能上传jpg/png/jpeg文件');
        return;
      }
    }

2、根据文件类型判断

    uploadFile(file){
      // 图片类型 image/png 等以 image/ 开头
      const isImage = file.type.startsWith('image/');
      if (!isImage) {
        this.$Message.error('请上传图片文件');
        return;
      }
    }

3、读取文件内容判断

非图片文件修改后缀为图片格式上传会报错,通过前两种方法可能无法正确识别图片是否正确,可以使用以下读取文件内容的方法。

    async uploadFile(file) {
      // 读取文件内容
      const fileContent = await this.readFileContent(file);
      // 校验文件内容是否为图片格式
      if (!this.isImageFile(fileContent)) {
        this.$Message.error('请上传正确的图片文件');
        return;
      }
    },
    readFileContent(file) {
      return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.onload = (event) => {
          resolve(event.target.result);
        };
        reader.readAsArrayBuffer(file);
      });
    },
    isImageFile(fileContent) {
      // 示例:检查 Magic Number 或特定图像格式的标识
      const view = new DataView(fileContent);
      const magicNumber = view.getUint16(0, false);
      // 常见图片格式的 Magic Number :
      // JPEG:0xFFD8、PNG:0x8950、GIF:0x4749、BMP:0x424D
      return magicNumber === 0xFFD8 || magicNumber === 0x8950; 
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值