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

断点续传实现

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

vue上传视频实现

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

注意事项

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

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

相关文章

jquery上传

jquery上传

jQuery 文件上传的实现方法 jQuery 可以通过多种方式实现文件上传功能,以下介绍几种常见的方法: 使用原生表单和 AJAX 通过 HTML 表单结合 jQuery 的 AJAX 功能实现文…

vue 怎么实现上传

vue 怎么实现上传

Vue 实现文件上传的方法 使用原生 HTML5 文件上传 通过 <input type="file"> 元素结合 Vue 的数据绑定实现基础文件上传功能。 <template&g…

vue webrtc实现视频

vue webrtc实现视频

Vue 与 WebRTC 实现视频通信 WebRTC(Web Real-Time Communication)是一种支持浏览器实时音视频通信的技术。结合 Vue.js 框架,可以快速构建视频通话应用。…

vue实现缓存视频

vue实现缓存视频

Vue 实现视频缓存的方法 在 Vue 中实现视频缓存可以通过多种方式完成,包括使用浏览器的缓存机制、Service Worker 或者借助第三方库。以下是几种常见的方法: 使用 Service W…

php实现视频直播

php实现视频直播

PHP 实现视频直播的基本方法 PHP 本身并不直接处理视频流,但可以作为后端支持视频直播系统的搭建。以下是几种常见的实现方式: 使用第三方流媒体服务 利用现成的流媒体平台(如 Wowza、Red5…

vue 实现上传视频

vue 实现上传视频

使用 Vue 实现上传视频功能 在 Vue 中实现上传视频功能,通常需要结合 HTML 的 <input type="file"> 元素和 Vue 的事件处理。以下是具体实现方法: 基本…