当前位置:首页 > 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> 标签 在 Vue 组件模板中直接使用 HTML5 的 &…

vue 怎么实现上传

vue 怎么实现上传

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

vue实现视频下滑

vue实现视频下滑

Vue 实现视频下滑功能 实现视频下滑功能通常涉及监听滚动事件、动态加载视频内容以及优化性能。以下是具体实现方法: 监听滚动事件 在 Vue 中可以通过 @scroll 事件监听滚动行为,结…

js实现文件的上传

js实现文件的上传

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。HTML部分需要包含一个文件选择控件和一个提交按…

vue 实现上传视频

vue 实现上传视频

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

vue实现上传进度

vue实现上传进度

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