ant-design-vue的upload组件之图⽚上传前的图⽚宽⾼判断须知知识点:
FileReader()对象
Image()对象
upload组件
有⼀个需求,需要判断上传的图⽚的宽⾼,限制800*800像素⼤⼩,⽤的是ant-design-vue框架。
1.原⽣的input type="file"判断图⽚⼤⼩的⽅法如下:
HTML:
<input type="file" id="img">
<h1 id="h1"></h1>
JS:
hange=function(e){
2// e.target.files[0]表⽰选取的第⼀个⽂件
3    console.log(e.target.files[0]);
4// FileReader对象将⽂件读取为dataURL格式
5    let reader=new FileReader();
6    adAsDataURL(e.target.files[0]),
7// load事件在读取操作结束的时候触发
8    load=()=>{
9        const img=new Image();
10// sult返回⽂件的内容。只有在读取操作完成后,此属性才有效,返回的数据的格式取决于是使⽤哪种读取⽅法来执⾏读取操作的。
11        img.sult;
12// 如果此时直接获取img的宽⾼结果是0,只有当图⽚加载结束以后(load)获取才能获取到
13        load=()=>{
14            let w=img.width;
15            let h=img.height;
16            h1.innerHTML=`宽:${w}-⾼${h}`
17        }
18    }
19 }
2.ant-design-vue中使⽤upload组件中获取图⽚⼤⼩的⽅式如下:
template:
<a-upload
accept="image/jpg,image/jpeg,image/png"
action="ky.io/v2/5cc8019d300000980a055e76"
list-type="picture-card"
:file-list="imgList"
@preview="handlePreview"
@change="handleChange"
:beforeUpload="beforeUpload"
>
</a-upload>
开始在handleChange⽅法中判断img⽂件,它传⼊的是⼀个已经选择⽂件的列表,他的内容如下:
如果直接⽤这个列表中单个元素来执⾏上述图⽚判断,则会报错:
原⽣js中的input type="file"打印出来e.target.files[0]结构如下:
这就是读取失败的原因,展开ant-design-vue中的originFileObj属性,发现原⽣file的内容被放到这⾥了:
antdesignvue 配置外部文件⽽且再把beforeUpload⽂件上传前钩⼦函数中的默认传⼊的参数file打印出来发现就是原⽣input type="file"的内容,所以直接在beforeUpload钩⼦函数中直接判断图⽚的width和height中即可。
1// 上传⽂件之前的钩⼦
2  beforeUpload(file){
3    console.log("beforeUpload中:",file);
4    let reader = new FileReader();
5    adAsDataURL(file);
6    load=()=>{
7      const image=new Image();
8      image.sult;
9      load=()=>{
10        let w=image.width;
11        let h=image.height;
12        console.log("宽⾼:",w,h);
13      }
14    }
15return false;
16  }