上传视频 创建文件选择控件,限制文件类型为视频格式(如 .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 实现文件上传可以通过原生 HTML 的 <input type="file"> 或第三方库(如 axios、vue-upload-component)完…

div css制作网页视频

div css制作网页视频

使用DIV和CSS制作网页视频 在网页中嵌入视频可以通过HTML5的<video>标签结合DIV和CSS实现,以下是一种常见的实现方式: 基本HTML结构 创建一个包含视频播放器的DIV…

vue实现文件的上传

vue实现文件的上传

文件上传的基本实现 在Vue中实现文件上传通常结合HTML的<input type="file">元素和FormData对象。通过监听文件选择事件获取文件对象,再通过AJAX或axios发…

vue实现多人视频

vue实现多人视频

Vue实现多人视频通话 使用Vue实现多人视频通话需要结合WebRTC技术和相关库。以下是关键步骤和代码示例: 安装依赖 需要安装peerjs和vue-webrtc等库: npm instal…

利用h5实现视频通话

利用h5实现视频通话

实现H5视频通话的关键技术 WebRTC(Web Real-Time Communication)是实现H5视频通话的核心技术。它允许浏览器之间直接进行实时音视频通信,无需插件或第三方软件。 基本实…

vue 实现视频

vue 实现视频

Vue 实现视频播放的方法 在 Vue 中实现视频播放可以通过多种方式完成,常见的有使用 HTML5 的 <video> 标签或第三方库如 video.js。以下是几种实现方法: 使用…