vant框架实现文件上传并视频的第一帧作为缩略图
时间: 2023-04-06 09:01:06 浏览: 302
Canvas获取视频第一帧缩略图的实现
可以使用 vant 的 Upload 组件实现文件上传,同时使用 video.js 库获取视频的第一帧作为缩略图。具体实现可以参考以下代码:
<template>
<van-uploader
:after-read="afterRead"
:before-read="beforeRead"
:preview-options="{showIndicators: false}"
:max-count="1"
accept="video/*"
capture="camera"
multiple
:preview-image="false"
:preview-full-image="false"
:preview-cover="false"
>
<van-icon name="photograph" />
</van-uploader>
</template>
<script>
import videojs from 'video.js'
import 'video.js/dist/video-js.css'
export default {
methods: {
async beforeRead(file) {
// 判断是否为视频文件
if (file.type.indexOf('video') !== 0) {
this.$toast('请选择视频文件')
return false
}
},
async afterRead(file) {
// 创建 video 元素
const video = document.createElement('video')
video.src = URL.createObjectURL(file)
video.preload = 'metadata'
video.onloadedmetadata = async () => {
// 获取视频第一帧作为缩略图
const canvas = document.createElement('canvas')
canvas.width = video.videoWidth
canvas.height = video.videoHeight
canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height)
const thumbnail = canvas.toDataURL('image/jpeg')
// 上传视频和缩略图
const formData = new FormData()
formData.append('video', file)
formData.append('thumbnail', thumbnail)
// 发送上传请求
const response = await this.$axios.post('/api/upload', formData)
this.$toast('上传成功')
}
// 初始化 video.js
videojs(video)
},
},
}
</script>
阅读全文