元素可以轻松实现视频文件的选择功能。通过设置accept属性限制文件类型为视频格式。
当前位置:首页 > JavaScript

js实现视频上传代码

2026-01-31 07:58:22JavaScript

视频上传的基本实现

使用HTML5的<input type="file">元素可以轻松实现视频文件的选择功能。通过设置accept属性限制文件类型为视频格式。

<input type="file" id="videoUpload" accept="video/*">

文件选择和预览

通过JavaScript监听文件选择事件,可以获取用户选择的视频文件对象。使用URL.createObjectURL()方法生成临时URL用于视频预览。

document.getElementById('videoUpload').addEventListener('change', function(e) {
    const file = e.target.files[0];
    if (!file) return;

    const videoURL = URL.createObjectURL(file);
    const preview = document.createElement('video');
    preview.src = videoURL;
    preview.controls = true;
    document.body.appendChild(preview);
});

上传到服务器

使用FormData对象构建表单数据,通过fetchXMLHttpRequest将视频文件发送到服务器。需要设置Content-Typemultipart/form-data

js实现视频上传代码

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

    fetch('/upload', {
        method: 'POST',
        body: formData
    })
    .then(response => response.json())
    .then(data => console.log('Upload success:', data))
    .catch(error => console.error('Error:', error));
}

进度监控

通过XMLHttpRequestupload属性可以监控上传进度,实时更新进度条显示。

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

    xhr.upload.onprogress = function(e) {
        if (e.lengthComputable) {
            const percent = (e.loaded / e.total) * 100;
            console.log(`Uploaded: ${percent.toFixed(2)}%`);
        }
    };

    xhr.onload = function() {
        console.log('Upload complete');
    };

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

文件验证

在上传前对视频文件进行验证,包括文件类型、大小等限制。

js实现视频上传代码

function validateVideo(file) {
    const validTypes = ['video/mp4', 'video/webm', 'video/ogg'];
    const maxSize = 100 * 1024 * 1024; // 100MB

    if (!validTypes.includes(file.type)) {
        alert('Invalid video format');
        return false;
    }

    if (file.size > maxSize) {
        alert('Video too large');
        return false;
    }

    return true;
}

分块上传

对于大视频文件,可以实现分块上传以提高可靠性和恢复能力。

async function chunkedUpload(file, chunkSize = 5 * 1024 * 1024) {
    const totalChunks = Math.ceil(file.size / chunkSize);
    let chunkNumber = 0;

    while (chunkNumber < totalChunks) {
        const start = chunkNumber * 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('chunkNumber', chunkNumber);
        formData.append('totalChunks', totalChunks);
        formData.append('filename', file.name);

        await fetch('/upload-chunk', {
            method: 'POST',
            body: formData
        });

        chunkNumber++;
    }
}

使用第三方库

对于更复杂的需求,可以考虑使用现成的文件上传库如uppydropzone

// 使用uppy示例
const uppy = new Uppy.Core()
    .use(Uppy.Dashboard, { target: '#upload-container' })
    .use(Uppy.XHRUpload, { endpoint: '/upload' });

uppy.on('complete', (result) => {
    console.log('Upload complete:', result);
});

这些方法涵盖了从基本到高级的视频上传功能实现,可以根据具体需求选择适合的方案。

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

相关文章

vue代码核心实现

vue代码核心实现

Vue 核心实现原理 Vue.js 的核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现要点: 响应式系统 通过 Object.defineProperty(Vue 2)…

vue实现登录代码

vue实现登录代码

以下是一个基于 Vue.js 的登录功能实现示例,包含表单验证和异步请求处理: 基础组件结构 <template> <div class="login-container"&g…

vue实现音乐上传

vue实现音乐上传

Vue 实现音乐上传功能 音乐上传功能通常涉及前端界面交互、文件选择、上传进度显示以及后端接口对接。以下是基于 Vue 的实现方法: 前端界面设计 使用 Vue 的模板语法创建一个简单的上传界面,包…

vue实现上传头像显示

vue实现上传头像显示

Vue 实现上传头像并显示 前端实现(Vue 3 + Element Plus) 模板部分 <template> <div class="avatar-upload">…

Vue实现图片批量上传

Vue实现图片批量上传

Vue 图片批量上传实现方法 准备工作 安装必要依赖(如axios、element-ui等),确保项目基于Vue 2/3环境。以Vue 3 + Element Plus为例: npm install…

vue实现轮播图代码

vue实现轮播图代码

Vue实现轮播图代码 以下是一个基于Vue 3的轮播图实现示例,包含自动轮播、手动切换和指示器功能。 基础结构 <template> <div class="carouse…