由于用阿里云解析视频的时候,是按照视频时长收费的,为了节省测试费用,老板要我在上传之前限制一下视频的时长!
这里通过video 的视频预览来实现的
代码如下
const gettime = (video, size) => {
const promise = new Promise(resolve => {
video.addEventListener('canplaythrough', e => {
console.log(58, e, e.target.duration, size)
if (e.target.duration <= size) {
resolve(true)
} else {
resolve(false)
}
})
})
return promise
}
export const checkSize = async (files, size) => {
// console.log(56, Number.isNaN(Number(size)), size)
if (!files || !files[0]) return false
// 这一条是正式服务器不需要这段所以当size 为undefined 时默认 返回 true
if (Number.isNaN(Number(size))) return true
const checktimevideo = document.getElementById('checktimevideo')
if (checktimevideo) {
document.body.removeChild(checktimevideo)
}
const video = document.createElement('video')
const url = URL.createObjectURL(files[0])
video.src = url
video.id = 'checktimevideo'
video.style.display = 'none'
document.body.appendChild(video)
return await gettime(video, size)
}
// 这个函数调用的时候也非常简单
<input
type='file'
onChange = { async e => {
e.persist() // 这个是用来处理 SyntheticEvent 问题的
const isok = await checkSize(e.target.files[0], 200) // 200 表示200秒
} }
/>
网友评论