上传视频 创建文件选择控件,限制文件类型为视频格式(如 .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>

vue上传视频实现

分片上传大视频文件

使用 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 代码:

vue上传视频实现

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 中实现树形视频列表可以通过递归组件和嵌套数据结构来完成。以下是具体实现方法: 数据结构设计 使用嵌套数组表示视频分类和子视频,每个节点包含 id、name、ch…

vue实现视频直播

vue实现视频直播

Vue 实现视频直播的方法 使用 video.js 和 HLS 协议 安装 video.js 和 videojs-contrib-hls 插件: npm install video.js video…

vue实现切片上传

vue实现切片上传

切片上传的实现原理 切片上传是将大文件分割成多个小块(切片)分别上传,最后在服务端合并。这种方式能提高上传效率、支持断点续传和并发上传。 前端实现步骤 使用Vue实现切片上传需要借助File…

vue java实现分片上传

vue java实现分片上传

分片上传的实现原理 分片上传是将大文件分割成多个小块分别上传,最后在服务器合并的技术。这种方式能解决大文件上传超时、网络不稳定等问题,同时支持断点续传。 前端Vue实现 前端需要使用File API…

vue实现图片压缩上传

vue实现图片压缩上传

实现图片压缩上传的方法 使用HTML5的Canvas进行压缩 通过Canvas的drawImage和toDataURL方法实现图片压缩。创建一个input元素用于选择图片,监听change事件处理压缩…

vue实现上传头像显示

vue实现上传头像显示

Vue 实现上传头像并显示 前端实现(Vue 3 + Element Plus) 模板部分 <template> <div class="avatar-upload">…