最近,该产品提出了一个要求。前端上传视频或图片时,需要验证分辨率,需要验证视频时长。这时候我就开始怀疑了,JS能不能验证视频呢?后来发现可以通过URL.createObjectURL方法将文件对象转化为视频实体DOM,然后根据loadedmetadata事件获取视频的一些相关信息。因为事件本身是异步的,所以被封装成一个Promise。//获取视频信息getVideoPlayerInfo(file){returnnewPromise(resolve=>{letvideoElement=document.createElement('video');videoElement.src=URL.createObjectURL(file);videoElement.addEventListener('loadedmetadata',function(){resolve({duration:videoElement.duration,width:videoElement.videoWidth,height:videoElement.videoHeight});});});},//验证信息validateVideoPlayerInfo(file){this.getVideoPlayerInfo(file).then(videoInfo=>{const{duration,width,height}=videoInfo;//这里可以对这条信息进行一些校验操作//......});},图片类似,但是,可以直接通过newImage创建Image的DOM,通过load事件获取getImageInfo(file){returnnewPromise(resolve=>{constimage=newImage();image.src=URL.createObjectURL(文件);我mage.addEventListener('load',()=>{const{width,height}=image;resolve({width,height});});});},//验证图像分辨率validateImageResolutionInfo(file){returnnewPromise((resolve,reject)=>{this.getImageInfo(file).then(imageInfo=>{const{width,height}=imageInfo;});});同样的操作也可以用在音频audio上
