当前位置:首页 > VUE

vue上传视频实现

2026-02-10 20:22:56VUE

Vue 上传视频实现

在 Vue 中实现视频上传功能,可以通过以下方法完成。以下步骤涵盖了从文件选择到上传至服务器的完整流程。

文件选择与预览

使用 <input type="file"> 结合 Vue 的 v-model 或事件监听实现文件选择。通过 URL.createObjectURL 生成预览链接。

<template>
  <div>
    <input type="file" accept="video/*" @change="handleFileChange" />
    <video v-if="videoUrl" :src="videoUrl" controls width="300"></video>
  </div>
</template>

<script>
export default {
  data() {
    return {
      videoUrl: null,
      selectedFile: null
    };
  },
  methods: {
    handleFileChange(event) {
      const file = event.target.files[0];
      if (file) {
        this.selectedFile = file;
        this.videoUrl = URL.createObjectURL(file);
      }
    }
  }
};
</script>

文件上传

通过 FormData 对象将文件发送至服务器。使用 axios 或其他 HTTP 库实现上传。

vue上传视频实现

methods: {
  async uploadVideo() {
    if (!this.selectedFile) return;

    const formData = new FormData();
    formData.append('video', this.selectedFile);

    try {
      const response = await axios.post('/api/upload', formData, {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      });
      console.log('Upload success:', response.data);
    } catch (error) {
      console.error('Upload failed:', error);
    }
  }
}

进度显示

通过 axiosonUploadProgress 回调实现上传进度监控。

const response = await axios.post('/api/upload', formData, {
  headers: {
    'Content-Type': 'multipart/form-data'
  },
  onUploadProgress: (progressEvent) => {
    const percentCompleted = Math.round(
      (progressEvent.loaded * 100) / progressEvent.total
    );
    console.log('Upload progress:', percentCompleted + '%');
  }
});

文件校验

在上传前校验文件类型和大小。

vue上传视频实现

handleFileChange(event) {
  const file = event.target.files[0];
  if (!file) return;

  const validTypes = ['video/mp4', 'video/webm'];
  const maxSize = 100 * 1024 * 1024; // 100MB

  if (!validTypes.includes(file.type)) {
    alert('Please select a valid video file (MP4 or WebM).');
    return;
  }

  if (file.size > maxSize) {
    alert('File size exceeds 100MB limit.');
    return;
  }

  this.selectedFile = file;
  this.videoUrl = URL.createObjectURL(file);
}

分片上传(大文件优化)

对于大文件,可采用分片上传策略。

async uploadChunks(file) {
  const chunkSize = 5 * 1024 * 1024; // 5MB
  const chunks = Math.ceil(file.size / chunkSize);

  for (let i = 0; i < chunks; i++) {
    const start = i * chunkSize;
    const end = Math.min(start + chunkSize, file.size);
    const chunk = file.slice(start, end);

    const formData = new FormData();
    formData.append('chunk', chunk);
    formData.append('chunkIndex', i);
    formData.append('totalChunks', chunks);
    formData.append('filename', file.name);

    await axios.post('/api/upload-chunk', formData);
  }
}

后端配合示例(Node.js)

以下是一个简单的 Node.js Express 后端接收代码示例。

const express = require('express');
const multer = require('multer');
const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/api/upload', upload.single('video'), (req, res) => {
  console.log('File uploaded:', req.file);
  res.json({ message: 'Upload successful' });
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

注意事项

  • 跨域问题:确保后端配置了 CORS 头。
  • 安全性:后端需校验文件类型和内容,避免恶意上传。
  • 存储:考虑使用云存储(如 AWS S3、阿里云 OSS)处理大文件。
  • 断点续传:可通过记录已上传分片实现。

以上方法可根据实际需求调整,例如添加拖拽上传、多文件上传等扩展功能。

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

相关文章

vue视频怎么实现

vue视频怎么实现

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

css飞机制作视频

css飞机制作视频

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

vue实现头像上传

vue实现头像上传

Vue 头像上传实现方法 使用 <input type="file"> 基础方法 创建文件输入控件并监听 change 事件: <template> <div&g…

vue实现树形视频

vue实现树形视频

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

vue实现视频直播

vue实现视频直播

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

vue实现视频录制

vue实现视频录制

实现视频录制的基本思路 在Vue中实现视频录制通常需要借助浏览器的MediaDevices API和MediaRecorder API。核心流程包括获取用户摄像头/麦克风权限、录制媒体流、保存录制结果…