视频上传前获取视频源信息(时长,分辨率等)
因为视频与图片不同,没有 new video 这种创建方法,所以使用document.createElement(‘video’),其他方式与获取图片源信息的方法一致,在这里使用了vue+element ui,在el-upload标签中的beforeupload方法,在文件上传前进行信息获取,进行校验并拦截
videoSize(file) {
return new Promise((resolve, reject) => {
const _URL = window.URL || window.webkitURL
const videoElement = document.createElement('video')
videoElement.addEventListener('loadedmetadata', function(_event) {
const duration = Math.round(videoElement.duration)
file.duration = duration
file.width = videoElement.videoWidth
file.height = videoElement.videoHeight
if ((file.size / 1024 / 1024) > 50) {
reject('部分上传视频超出大小限制(50M)上传失败')
} else {
const fileSize = (file.width / file.height)
if (fileSize > 1.90 && fileSize < 1.92) {
file.scale = '1.91:1'
resolve()
} else if (fileSize < 1.78 && fileSize > 1.76) {
file.scale = '16:9'
resolve()
} else if (fileSize < 0.68 && fileSize > 0.66) {
file.scale = '1:1.48'
resolve()
} else if (fileSize < 0.57 && fileSize > 0.55) {
file.scale = '9:16'
resolve()
} else {
reject()
}
}
})
videoElement.src = _URL.createObjectURL(file)
}).then(
() => {
return file
},
() => {
this.$message.error(file.name + '因宽高比例不符合上传失败')
return Promise.reject()
}
)
},
beforeUpload(file) {
return this.videoSize(file)
}