当前位置:首页 > VUE

vue 实现视频上传

2026-03-10 07:42:38VUE

实现视频上传的基本步骤

安装必要的依赖库,如axios用于文件上传,vue-video-player用于视频预览(可选)。

npm install axios vue-video-player

创建上传组件

在Vue组件中创建文件输入元素,绑定change事件处理文件选择。

<template>
  <div>
    <input type="file" accept="video/*" @change="handleFileChange" />
    <button @click="uploadVideo">上传视频</button>
    <video v-if="videoUrl" :src="videoUrl" controls></video>
  </div>
</template>

处理文件选择和上传

methods中实现文件处理和上传逻辑,使用FormData对象包装文件数据。

<script>
import axios from 'axios';

export default {
  data() {
    return {
      selectedFile: null,
      videoUrl: ''
    };
  },
  methods: {
    handleFileChange(event) {
      this.selectedFile = event.target.files[0];
      this.videoUrl = URL.createObjectURL(this.selectedFile);
    },
    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('上传成功:', response.data);
      } catch (error) {
        console.error('上传失败:', error);
      }
    }
  }
};
</script>

服务器端处理

创建简单的Node.js Express服务器处理上传请求,使用multer中间件处理文件上传。

const express = require('express');
const multer = require('multer');
const app = express();

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'uploads/');
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + '-' + file.originalname);
  }
});

const upload = multer({ storage });

app.post('/api/upload', upload.single('video'), (req, res) => {
  res.json({ message: '文件上传成功', file: req.file });
});

app.listen(3000, () => {
  console.log('服务器运行在端口3000');
});

进度显示和限制

添加上传进度显示和文件大小限制,提升用户体验。

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

    // 文件大小限制(50MB)
    const maxSize = 50 * 1024 * 1024;
    if (this.selectedFile.size > maxSize) {
      alert('文件大小超过50MB限制');
      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'
        },
        onUploadProgress: progressEvent => {
          const percentCompleted = Math.round(
            (progressEvent.loaded * 100) / progressEvent.total
          );
          console.log(`上传进度: ${percentCompleted}%`);
        }
      });
      console.log('上传成功:', response.data);
    } catch (error) {
      console.error('上传失败:', error);
    }
  }
}

视频预览优化

使用vue-video-player提供更好的视频预览体验。

vue 实现视频上传

import { videoPlayer } from 'vue-video-player';

export default {
  components: {
    videoPlayer
  },
  data() {
    return {
      playerOptions: {
        autoplay: false,
        controls: true,
        sources: []
      }
    };
  },
  methods: {
    handleFileChange(event) {
      this.selectedFile = event.target.files[0];
      this.playerOptions.sources = [{
        type: this.selectedFile.type,
        src: URL.createObjectURL(this.selectedFile)
      }];
    }
  }
};
<template>
  <div>
    <input type="file" accept="video/*" @change="handleFileChange" />
    <video-player :options="playerOptions"></video-player>
    <button @click="uploadVideo">上传视频</button>
  </div>
</template>

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

相关文章

vue实现视频

vue实现视频

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

h5实现实时视频通话

h5实现实时视频通话

实现H5实时视频通话的技术方案 WebRTC是实现H5实时视频通话的核心技术,无需插件即可在浏览器中实现点对点通信。以下是关键实现步骤: 基础环境准备 确保使用支持WebRTC的现代浏览器(Chro…

vue 怎么实现上传

vue 怎么实现上传

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

vue实现拖拽上传

vue实现拖拽上传

Vue 拖拽上传实现方法 使用 HTML5 原生拖拽 API 在 Vue 中可以通过监听原生拖拽事件实现基础功能: <template> <div class="dr…

vue实现视频背景

vue实现视频背景

使用 Vue 实现视频背景 在 Vue 中实现视频背景可以通过多种方式完成,以下是一些常见的方法: 使用 HTML5 <video> 标签 在 Vue 组件的模板中直接使用 <vi…

vue实现附件上传

vue实现附件上传

文件上传的基本实现 在Vue中实现文件上传可以通过原生HTML的<input type="file">元素结合Vue的数据绑定和事件处理来完成。创建一个文件上传组件,监听change事件获…