上传视频 创建文件选择控件,限制文件类型为视频格式(如 .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中可通过HTML5的<video>标签结合自定义逻辑实现。 视频分片处理 视频文件…

vue实现上传头像

vue实现上传头像

使用 Vue 实现上传头像 前端实现 创建一个文件上传组件,使用 <input type="file"> 元素选择文件,并通过 FileReader 预览图片。 <template…

vue webrtc实现视频

vue webrtc实现视频

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

php实现视频上传

php实现视频上传

视频上传功能实现 使用PHP实现视频上传功能需要处理文件接收、验证、存储等步骤。以下是具体实现方法: 创建HTML表单 前端表单需要设置enctype="multipart/form-data"以支…

vue实现上传进度

vue实现上传进度

Vue 实现文件上传进度 在 Vue 中实现文件上传进度可以通过 XMLHttpRequest 或 axios 的 onUploadProgress 事件来监听上传进度。以下是两种常见实现方式: 使…

Vue实现视频截图

Vue实现视频截图

Vue实现视频截图的步骤 在Vue中实现视频截图功能,可以通过HTML5的<video>元素和Canvas API来完成。以下是具体实现方法: 创建视频元素和Canvas 在Vue组件的…