【一个大三狗的毕业设计自救指南】

各位大佬好!我是福州某高校信息安全专业大三狗,此刻正抱着破笔记本在宿舍疯狂敲代码。眼看着毕业答辩只剩两个月,我的文件管理系统还卡在大文件上传这个世纪难题上——这感觉就像打游戏卡在最终BOSS关,而队友已经集体掉线了!


💻 需求清单(甲方爸爸附体版)

  1. 10G大文件传输:必须支持分片上传,像切西瓜一样把文件切成小块
  2. 加密全家桶:传输要SSL,存储要AES,文件夹还要保留层级结构
  3. 断点续传:就算我重启电脑+浏览器+虚拟机+服务器,进度条也不能丢
  4. IE8兼容:学校机房的Windows7+IE9还在顽强抵抗
  5. 白嫖代码:最好能直接抄作业,答辩时老师问就说"自主创新"

🛠️ 技术栈(穷学生版)

  • 前端:Vue3 + 原生JS(WebUploader魔改版)
  • 后端:PHP(Zend Studio写代码,CentOS跑服务)
  • 存储:阿里云OSS(老板说这是"混合云")
  • 数据库:MySQL(存点上传记录和加密密钥)

📂 前端核心代码(文件夹上传篇)

// 魔改后的WebUploader初始化(IE8兼容版)
const uploader = WebUploader.create({
    swf: '/path/to/webuploader.swf', // IE8救命稻草
    server: '/api/upload',
    chunked: true,
    chunkSize: 5 * 1024 * 1024, // 5MB分片
    threads: 3,
    formData: {
        _token: 'csrf_token_here',
        encrypt: 'AES-256' // 加密标志
    },
    // 自定义文件夹结构处理
    accept: {
        title: 'Files',
        extensions: '*',
        mimeTypes: '*'
    }
});

// 文件夹上传黑科技
uploader.on('filesQueued', function(files) {
    files.forEach(file => {
        if (file.isDir) { // 检测文件夹
            const dirReader = new FileReader();
            dirReader.readAsArrayBuffer(file); // 伪代码,实际需要递归读取
        }
    });
});

// 断点续传核心(利用localStorage存进度)
const saveProgress = (fileId, chunkIndex) => {
    try {
        const progress = JSON.parse(localStorage.getItem('upload_progress') || '{}');
        progress[fileId] = chunkIndex;
        localStorage.setItem('upload_progress', JSON.stringify(progress));
    } catch (e) {
        console.log('IE8兼容模式:使用cookie备份');
        document.cookie = `progress_${fileId}=${chunkIndex};max-age=86400`;
    }
};

🖥️ PHP后端处理(加密存储篇)

putObject([
    'Bucket' => 'your-bucket',
    'Key' => "uploads/{$fileId}/{$chunkIndex}.enc",
    'Body' => $encrypted,
    'ContentIV' => base64_encode($iv) // 存储IV用于解密
]);

// 记录上传进度到MySQL
$pdo->prepare("INSERT INTO upload_progress (file_id, chunk_index, status) VALUES (?, ?, 1)")
    ->execute([$fileId, $chunkIndex]);

echo json_encode(['status' => 'success']);
?>

💡 血泪经验总结

  1. IE8兼容:必须用Flash版本的WebUploader,还得准备polyfill
  2. 加密性能:大文件加密会拖慢速度,建议:
    • 前端用Web Crypto API(现代浏览器)
    • 后端用OpenSSL扩展(PHP)
  3. 断点续传
    • 进度存储:localStorage > cookie > IndexedDB
    • 服务端需要记录已上传的分片
  4. 文件夹结构
    • 前端生成JSON描述文件
    • 后端解析后重建目录树

🙏 紧急求助

现在我的代码能实现:

  • ✅ 单文件分片上传
  • ✅ 基础加密功能
  • ✅ 内存中记录进度(重启就GG)

急需大佬帮忙解决:

  1. 持久化断点信息:怎么把进度存到MySQL还不卡顿
  2. 文件夹层级处理:上传后如何保持原结构
  3. IE8兼容:Flash上传偶尔会白屏

PS:加群374992201真的送红包!虽然最多就99元,但够买三杯奶茶续命了!群里还有大佬偶尔直播改bug,比刷抖音学得多!

PPS:求福州/厦门的IT公司内推!本人擅长:

  • 熬夜改BUG
  • 背锅不甩锅
  • 精通"这个需求做不了"的108种说法

(配图:宿舍凌乱的桌面,显示器上贴着"毕业设计=生命"的便签)

安装环境

PHP:7.2.14
Alt

调整块大小

Alt

NOSQL

NOSQL不需要任何配置,可以直接访问测试
Alt

SQL

创建数据库

您可以直接复制脚本进行创建
Alt
Alt

配置数据库连接

Alt

安装依赖

Alt

访问页面进行测试

Alt

数据表中的数据

Alt

效果预览

文件上传

文件上传

文件刷新续传

支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传
文件续传

文件夹上传

支持上传文件夹并保留层级结构,同样支持进度信息离线保存,刷新页面,关闭页面,重启系统不丢失上传进度。
文件夹上传

免费下载示例

点击下载完整示例

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐