上传视频 创建文件选择控件,限制文件类型为视频格式(如 .mp4, .webm)。通过 @change 事件监听文件选择,获取 File 对象…">
当前位置:首页 > VUE

vue上传视频实现

2026-01-14 03:39:24VUE

使用 <input type="file"> 上传视频

创建文件选择控件,限制文件类型为视频格式(如 .mp4, .webm)。通过 @change 事件监听文件选择,获取 File 对象:

<template>
  <input type="file" accept="video/*" @change="handleFileUpload" />
</template>
<script>
export default {
  methods: {
    handleFileUpload(event) {
      const file = event.target.files[0];
      if (file && file.type.includes('video')) {
        // 处理上传逻辑
      }
    }
  }
}
</script>

预览视频内容

通过 URL.createObjectURL 生成临时链接实现前端预览:

methods: {
  handleFileUpload(event) {
    const file = event.target.files[0];
    if (file) {
      const videoUrl = URL.createObjectURL(file);
      this.$refs.videoElement.src = videoUrl; // 绑定到<video>标签
    }
  }
}

需在模板中添加 <video ref="videoElement" controls></video>

分片上传大视频文件

使用 File.slice() 分割文件,配合 FormData 逐块上传:

async uploadChunks(file) {
  const chunkSize = 5 * 1024 * 1024; // 5MB分片
  let offset = 0;
  while (offset < file.size) {
    const chunk = file.slice(offset, offset + chunkSize);
    const formData = new FormData();
    formData.append('chunk', chunk);
    formData.append('offset', offset);
    await axios.post('/upload', formData);
    offset += chunkSize;
  }
}

后端接收与合并

后端需实现分片接收和最终合并逻辑。示例 Node.js 代码:

const fs = require('fs');
app.post('/upload', (req, res) => {
  const { chunk, offset } = req.files;
  const stream = fs.createWriteStream('output.mp4', { flags: offset ? 'r+' : 'w' });
  stream.write(chunk.data, () => stream.end());
});

进度显示

通过 Axios 的 onUploadProgress 事件监听上传进度:

axios.post('/upload', formData, {
  onUploadProgress: progressEvent => {
    const percent = Math.round((progressEvent.loaded / progressEvent.total) * 100);
    console.log(`进度: ${percent}%`);
  }
})

断点续传实现

记录已上传分片信息,重新上传时跳过已完成部分:

// 前端保存已上传的offset
localStorage.setItem('lastOffset', offset);
// 下次上传时读取
const lastOffset = parseInt(localStorage.getItem('lastOffset')) || 0;

注意事项

  • 服务端需配置请求体大小限制(如 Nginx 的 client_max_body_size)。
  • 视频格式验证应同时检查文件头和扩展名。
  • 生产环境建议使用七牛云、阿里云 OSS 等第三方存储服务。

vue上传视频实现

标签: 上传视频
分享给朋友:

相关文章

vue实现上传表哥

vue实现上传表哥

Vue 实现上传表格 在 Vue 中实现上传表格功能,通常涉及文件上传、文件解析(如 Excel 或 CSV)以及数据展示。以下是具体实现方法: 使用 Element UI 上传组件 Element…

vue视频怎么实现

vue视频怎么实现

实现视频播放功能 在Vue中实现视频播放功能可以通过HTML5的<video>标签或第三方库来实现。以下是几种常见的方法: 使用HTML5 <video>标签 <te…

vue实现头像上传

vue实现头像上传

实现头像上传功能 在Vue中实现头像上传功能通常需要结合文件上传组件和后端接口处理。以下是具体实现步骤: 前端组件实现 创建文件上传组件模板部分: <template> <d…

css帧动画制作视频

css帧动画制作视频

使用CSS关键帧(@keyframes)制作动画 定义关键帧动画,通过@keyframes规则指定动画在不同时间点的样式变化。例如创建一个元素从左到右移动的动画: @keyframes slide…

css飞机制作视频

css飞机制作视频

使用CSS制作飞机动画 通过CSS的动画和变形属性,可以创建一个简单的飞机动画效果。以下是实现步骤: HTML结构 <div class="airplane"></div…

vue实现视频开场

vue实现视频开场

实现视频开场动画的方法 在Vue中实现视频开场动画可以通过多种方式完成,包括使用HTML5的<video>标签、第三方库或CSS动画。以下是几种常见的方法: 使用HTML5 <vi…