el-upload上传视频来抓取上传视频的时长

通过before-upload限制文件方法来获取视频的时长

 <el-upload
      class="upload-demo"
      action="#"
      :http-request="handleFileUpload"
      :before-upload="handleBeforeUpload">
    <el-button size="small" type="primary">点击上传</el-button>
    <div slot="tip" class="el-upload__tip">
        只能上传90s以内的视频
    </div>
 </el-upload>

handleBeforeUpload(file){
  console.log(file);
  const checkDuration = (file) => {
    return new Promise((resolve, reject) => {
      const videoUrl = URL.createObjectURL(file);
      const video = document.createElement('video');
      video.preload = 'metadata';

      video.onloadedmetadata = () => {
        const duration = video.duration;
        URL.revokeObjectURL(videoUrl); // 释放URL对象
        resolve(duration);
      };

      video.onerror = () => {
        URL.revokeObjectURL(videoUrl); // 释放URL对象
        reject(new Error('视频加载出错'));
      };

      video.src = videoUrl; // 设置视频源
    });
  };

  return checkDuration(file).then(duration => {
    if (duration > 90) {
      this.$message.error('视频时长不能超过90秒!');
      return false;
    }
    console.log(duration);
    return true; // 时长检查通过,可以继续上传
  }).catch(error => {
    this.$message.error('获取视频时长失败:' + error.message);
    return false; // 获取时长失败,阻止上传
  });
},
handleFileUpload(){

}




### Element Plus `el-upload` 组件用于视频上传及预览 为了实现视频文件的上传以及预览功能,在前端开发中通常会采用 Vue.js 结合 Element Plus 的方式来构建界面。具体来说,通过配置 `el-upload` 组件的各项属性和监听器,能够满足业务逻辑的需求。 #### 配置项设置 - **action**: 设置服务器端接收上传请求的地址。 - **before-upload**: 定义上传前的操作函数,可用于验证文件类型、大小等条件[^2]。 ```javascript const beforeUploadHandler = (file) => { const isVideo = file.type === 'video/mp4'; // 或者其他支持的视频格式 if (!isVideo) { ElMessage.error('仅允许上传MP4格式!'); } const isLt10M = file.size / 1024 / 1024 < 10; if (!isLt10M) { ElMessage.error('上传视频大小不能超过 10MB!'); } return isVideo && isLt10M; }; ``` - **on-preview**: 当点击已上传文件列表内的文件链接时触发此回调,可用来处理播放视频的动作。 ```html <template> <!-- ... --> <el-button type="primary" @click="handlePreview">预览</el-button> <!-- ... --> </template> <script setup lang="ts"> import { ref } from 'vue'; let videoUrl = ref(''); function handlePreview(file: any){ videoUrl.value = URL.createObjectURL(file.raw); } </script> <!-- 使用HTML5 Video标签显示视频 --> <video v-if="videoUrl !== ''" :src="videoUrl" controls></video> ``` - **auto-upload=false**: 关闭自动上传选项以便手动控制何时发起上传操作。 #### 处理上传过程中的状态变化 利用 `on-progress`, `on-success`, 和 `on-error` 这三个事件处理器分别应对不同阶段的状态更新: - `on-progress`: 显示进度条给用户看当前上传进展程度; - `on-success`: 成功完成上传之后执行相应动作比如刷新页面或清空表单; - `on-error`: 如果发生错误则给出提示信息告知用户出现问题所在。 ```html <el-upload class="upload-demo" drag action="https://jsonplaceholder.typicode.com/posts/" multiple :before-upload="beforeUploadHandler" :on-preview="handlePreview" :on-success="handleSuccess" :on-error="handleError" :on-progress="handleProgress" :auto-upload="false" > <i class="el-icon-upload"></i> <div class="el-upload__text">将文件拖到此处,或点击<em>上传</em></div> <template #tip> <div class="el-upload__tip">只能上传mp4文件,且不超过10mb</div> </template> </el-upload> ``` 以上就是基于 Element Plus 中 `el-upload` 组件实现视频上传及其预览的主要思路和技术要点[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值