大文件上传实现

分片上传

  1. 将大文件分割成多个小片(chunk),逐个上传。
  2. 每个片上传成功后,服务器可以返回确认信息。
  3. 所有片上传完成后,服务器端将这些片重新组合成原始文件。

以下是一个简单的分片上传的前端实现示例:

javascript 复制代码
function uploadFile(file) {
    const CHUNK_SIZE = 1 * 1024 * 1024; // 1MB
    let currentChunk = 0;
    const totalChunks = Math.ceil(file.size / CHUNK_SIZE);

    function uploadChunk() {
        const start = currentChunk * CHUNK_SIZE;
        const end = Math.min(file.size, start + CHUNK_SIZE);
        const chunk = file.slice(start, end);

        const formData = new FormData();
        formData.append('file', chunk);
        formData.append('fileName', file.name);
        formData.append('chunkIndex', currentChunk);
        formData.append('totalChunks', totalChunks);

        fetch('/upload', {
            method: 'POST',
            body: formData
        })
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                currentChunk++;
                if (currentChunk < totalChunks) {
                    uploadChunk(); // 递归上传下一片
                } else {
                    console.log('上传完成');
                }
            } else {
                console.error('上传失败', data.message);
            }
        })
        .catch(error => {
            console.error('上传错误', error);
        });
    }

    uploadChunk();
}

在服务器端,你需要处理接收到的片,存储这些片,并在所有片都上传完成后将它们合并。具体的服务器端实现取决于你使用的后端技术栈。

相关推荐
沫璃染墨9 分钟前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
时间的拾荒人14 分钟前
Qt 窗口系统详解:从菜单栏到对话框的完整指南
开发语言·qt·面试
樱花落木兰31 分钟前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存
wuyk55534 分钟前
Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过
开发语言·爬虫·python
流形填表39 分钟前
题库去重实战:基于题干指纹的重复题清理
开发语言·c#
\光辉岁月/42 分钟前
3.java运算符
java·开发语言
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,string类和标准模板库 — 完整知识点详解(16)
开发语言·c++·学习
qq_401700411 小时前
Qt 炫酷曲线,图表,2D/3D开源库
开发语言·qt
liangshanbo12151 小时前
面试题:线上 JavaScript 报错如何快速定位到源码?
开发语言·javascript·ecmascript
weixin_440730501 小时前
迭代器Iterator(列表生成器、可迭代的如何生成迭代器)
开发语言·python