当前位置:首页 > JavaScript

js实现视频上传代码

2026-04-04 23:57:53JavaScript

js实现视频上传代码

视频上传实现方法

前端部分(HTML + JavaScript)

<input type="file" id="videoUpload" accept="video/*">
<button onclick="uploadVideo()">上传视频</button>
<progress id="uploadProgress" value="0" max="100"></progress>

<script>
function uploadVideo() {
  const fileInput = document.getElementById('videoUpload');
  const file = fileInput.files[0];

  if (!file) {
    alert('请选择视频文件');
    return;
  }

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

  const xhr = new XMLHttpRequest();
  xhr.open('POST', '/upload', true);

  xhr.upload.onprogress = function(e) {
    if (e.lengthComputable) {
      const percent = Math.round((e.loaded / e.total) * 100);
      document.getElementById('uploadProgress').value = percent;
    }
  };

  xhr.onload = function() {
    if (xhr.status === 200) {
      alert('上传成功');
    } else {
      alert('上传失败');
    }
  };

  xhr.send(formData);
}
</script>

后端部分(Node.js + Express)

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

const app = express();
const upload = multer({ 
  dest: 'uploads/',
  limits: { fileSize: 100 * 1024 * 1024 } // 限制100MB
});

app.post('/upload', upload.single('video'), (req, res) => {
  if (!req.file) {
    return res.status(400).send('未收到文件');
  }

  // 获取文件信息
  const fileInfo = {
    originalName: req.file.originalname,
    size: req.file.size,
    mimetype: req.file.mimetype,
    path: req.file.path
  };

  res.status(200).json(fileInfo);
});

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

文件验证处理

// 在前端脚本中添加验证
function validateVideo(file) {
  const validTypes = ['video/mp4', 'video/webm', 'video/ogg'];
  const maxSize = 100 * 1024 * 1024; // 100MB

  if (!validTypes.includes(file.type)) {
    alert('仅支持MP4、WebM和Ogg格式');
    return false;
  }

  if (file.size > maxSize) {
    alert('文件大小不能超过100MB');
    return false;
  }

  return true;
}

完整流程说明

  1. 用户通过文件选择器选取视频文件
  2. 前端验证文件类型和大小
  3. 使用FormData封装文件数据
  4. 通过XMLHttpRequest发送到服务器
  5. 服务器接收并保存文件
  6. 前端显示上传进度
  7. 完成上传后返回结果

注意事项

  • 生产环境需要添加更严格的安全验证
  • 考虑使用分片上传处理大文件
  • 实现文件重命名避免冲突
  • 添加CSRF保护机制
  • 考虑使用WebSocket实现实时进度反馈

扩展功能建议

  • 添加视频预览功能
  • 实现断点续传
  • 支持多文件同时上传
  • 添加视频元数据提取功能
  • 实现视频转码处理

js实现视频上传代码

标签: 上传代码
分享给朋友:

相关文章

vue实现文件的上传

vue实现文件的上传

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

vue实现网站代码

vue实现网站代码

Vue 实现网站代码的基本步骤 安装 Vue.js 通过 npm 或 CDN 引入 Vue.js。使用 npm 安装:npm install vue。或者直接在 HTML 文件中引入 Vue CDN:…

vue 实现上传视频

vue 实现上传视频

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

vue实现上传进度

vue实现上传进度

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

代码雨实现vue

代码雨实现vue

实现代码雨效果(Vue版) 使用Vue实现代码雨效果可以通过Canvas绘制结合动画帧实现。以下是完整实现方案: 核心代码结构 <template> <div class="c…

vue分页代码实现

vue分页代码实现

Vue 分页代码实现 在 Vue 中实现分页功能通常需要结合后端 API 返回的数据和前端的分页组件。以下是一个完整的实现示例,包括分页组件的封装和与后端数据的交互。 分页组件封装 创建一个…