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;
}
完整流程说明
- 用户通过文件选择器选取视频文件
- 前端验证文件类型和大小
- 使用FormData封装文件数据
- 通过XMLHttpRequest发送到服务器
- 服务器接收并保存文件
- 前端显示上传进度
- 完成上传后返回结果
注意事项
- 生产环境需要添加更严格的安全验证
- 考虑使用分片上传处理大文件
- 实现文件重命名避免冲突
- 添加CSRF保护机制
- 考虑使用WebSocket实现实时进度反馈
扩展功能建议
- 添加视频预览功能
- 实现断点续传
- 支持多文件同时上传
- 添加视频元数据提取功能
- 实现视频转码处理
