元素可以轻松实现视频文件的选择功能。通过设置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

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);
}

文件验证

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

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

js实现视频上传代码

// 使用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中实现头像上传功能通常需要结合文件上传组件和后端接口处理。以下是具体实现步骤: 前端组件实现 创建文件上传组件模板部分: <template> <d…

vue上传视频实现

vue上传视频实现

使用 <input type="file"> 上传视频 创建文件选择控件,限制文件类型为视频格式(如 .mp4, .webm)。通过 @change 事件监听文件选择,获取 File 对象…

css网页制作代码

css网页制作代码

以下是一些常用的CSS网页制作代码示例,涵盖布局、样式和交互效果: 基础布局与样式 重置浏览器默认样式 * { margin: 0; padding: 0; box-sizing: b…

vue实现上传视频

vue实现上传视频

使用 <input type="file"> 实现基础上传 通过 HTML 原生文件选择控件获取视频文件,结合 Vue 处理上传逻辑。 <template> <…

vue分页代码实现

vue分页代码实现

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

vue代码实现管理

vue代码实现管理

Vue.js 管理后台实现方案 使用 Vue.js 构建管理后台系统通常涉及路由、状态管理、UI 组件库等核心模块。以下是关键实现方案: 基础框架搭建 安装 Vue CLI 创建项目: npm i…