news 2026/5/1 6:13:18

PHP续传大文件时进度条如何同步更新?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP续传大文件时进度条如何同步更新?

大文件上传系统开发指南(PHP+原生JS)

项目概述

兄弟,你这需求可真够硬的!20G文件上传、文件夹层级保留、全浏览器兼容、加密传输存储、断点续传…这活儿不轻松啊!不过既然你找到我了,咱们就一起啃下这块硬骨头。

系统架构

  • 前端:Vue3 CLI + 原生JS(因为要兼容IE8,Vue部分可能得悠着点用)
  • 后端:PHP + MySQL
  • 文件处理:Apache服务器本地存储
  • 加密:SM4/AES加密传输和存储
  • 特色:文件夹层级保留、断点续传、多浏览器兼容

前端实现(原生JS为主)

HTML部分 (index.html)

大文件上传系统 .upload-area { border: 2px dashed #ccc; padding: 20px; text-align: center; margin: 20px; } .file-list { margin: 20px; border: 1px solid #eee; padding: 10px; max-height: 300px; overflow-y: auto; } .progress-container { width: 100%; background: #f0f0f0; margin: 5px 0; } .progress-bar { height: 20px; background: #4CAF50; width: 0%; text-align: center; line-height: 20px; color: white; } .folder-tree { margin: 20px; padding: 10px; border: 1px solid #ddd; } 大文件上传系统 选择文件/文件夹 开始上传 暂停 继续 文件夹结构 上传队列

原生JS核心 (uploader.js)

// 全局变量varfileQueue=[];varcurrentUploads={};varchunkSize=5*1024*1024;// 5MB每片varuploadPaused=false;// 处理文件选择(支持文件夹)document.getElementById('fileInput').addEventListener('change',function(e){varfiles=e.target.files;if(files.length===0)return;// 显示文件夹结构document.getElementById('folderTree').style.display='block';buildFolderTree(files);// 添加到上传队列for(vari=0;i<files.length;i++){varfile=files[i];fileQueue.push({file:file,relativePath:getRelativePath(file),status:'pending',progress:0,uploadedChunks:0,totalChunks:Math.ceil(file.size/chunkSize),fileId:generateFileId(file)});}updateQueueDisplay();});

后端实现 (PHP)

upload.php (处理文件分片上传)

complete.php (合并文件)

false,'message'=>'文件合并失败']);exit;}echojson_encode(['success'=>true,'filePath'=>$targetFilePath]);?>

download.php (处理文件下载)

数据库设计

虽然这个示例主要使用文件系统存储,但如果你需要数据库记录,可以这样设计:

CREATETABLE`uploaded_files`(`id`int(11)NOTNULLAUTO_INCREMENT,`file_id`varchar(255)NOTNULL,`original_name`varchar(255)NOTNULL,`relative_path`varchar(1000)NOTNULL,`file_size`bigint(20)NOTNULL,`upload_date`datetimeNOTNULL,`user_id`int(11)DEFAULTNULL,`is_encrypted`tinyint(1)DEFAULT1,`status`enum('uploading','completed','failed')NOTNULLDEFAULT'uploading',PRIMARYKEY(`id`),UNIQUEKEY`file_id`(`file_id`),KEY`relative_path`(`relative_path`(255)))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;CREATETABLE`file_chunks`(`id`int(11)NOTNULLAUTO_INCREMENT,`file_id`varchar(255)NOTNULL,`chunk_index`int(11)NOTNULL,`upload_date`datetimeNOTNULL,PRIMARYKEY(`id`),UNIQUEKEY`file_chunk`(`file_id`,`chunk_index`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;

兼容性处理

IE8兼容性方案

由于IE8不支持很多现代API,我们需要做以下兼容:

  1. XMLHttpRequest:使用ActiveXObject
functioncreateXHR(){if(window.XMLHttpRequest){returnnewXMLHttpRequest();}elseif(window.ActiveXObject){try{returnnewActiveXObject("Msxml2.XMLHTTP");}catch(e){try{returnnewActiveXObject("Microsoft.XMLHTTP");}catch(e){returnnull;}}}returnnull;}
  1. FileReader:IE8不支持,需要使用Flash或iframe上传
// 简化示例:使用iframe上传作为回退方案functionsetupIE8Upload(){varform=document.createElement('form');form.method='post';form.enctype='multipart/form-data';form.target='upload_iframe';form.action='upload_ie8.php';variframe=document.createElement('iframe');iframe.name='upload_iframe';iframe.style.display='none';document.body.appendChild(iframe);varfileInput=document.getElementById('fileInput');form.appendChild(fileInput.cloneNode(true));document.body.appendChild(form);// 这里需要更复杂的处理来跟踪上传状态}
  1. JSON:引入json2.js

部署说明

  1. 将前端文件放在web目录下
  2. 创建uploads和temp_uploads目录并确保有写入权限
  3. 配置Apache支持大文件上传(修改php.ini):
    upload_max_filesize = 20G post_max_size = 20G max_execution_time = 3600 max_input_time = 3600 memory_limit = 512M

完整项目结构

/project-root /css style.css /js uploader.js ie8-fallback.js json2.js (可选) /uploads (自动创建) /temp_uploads (自动创建) index.html upload.php complete.php download.php upload_ie8.php (IE8回退方案)

注意事项

  1. 加密实现:示例中的加密函数是简化的,实际项目中需要集成SM4或AES加密库
  2. 断点续传:示例使用了localStorage,实际项目中应该使用数据库或更可靠的方式存储进度
  3. 性能优化:对于大文件夹,可能需要分批处理以避免内存问题
  4. 安全性
    • 严格验证文件路径,防止目录遍历攻击
    • 对上传文件进行病毒扫描
    • 实现用户认证和授权

后续支持

兄弟,这代码我给你整得差不多了,但有几个地方需要你自己完善:

  1. 实际加密解密实现(SM4/AES)
  2. 更完善的断点续传存储机制
  3. IE8的完整兼容方案
  4. 用户界面优化(Vue3部分)

我建议你:

  1. 先在测试环境部署,用小文件测试基本功能
  2. 逐步增加文件大小测试
  3. 测试各种浏览器兼容性
  4. 最后测试断点续传和文件夹结构保留

如果遇到具体问题,可以加我QQ群(374992201),咱们一起讨论。群里经常有红包活动,也有项目合作机会,说不定能接到更大的单子呢!

记住,咱们程序员就是要互相帮助,共同进步。这100块钱预算确实有点紧,但系统核心功能我都给你搭好了,你稍微调整调整就能交差。以后有这种好活儿,记得想着兄弟我啊!

安装环境

PHP:7.2.14

调整块大小

NOSQL

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

SQL

创建数据库

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

配置数据库连接

安装依赖

访问页面进行测试

数据表中的数据

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

免费下载示例

点击下载完整示例

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 2:35:19

强烈安利!MBA论文必备TOP9 AI论文软件深度测评

强烈安利&#xff01;MBA论文必备TOP9 AI论文软件深度测评 2026年MBA论文写作工具测评&#xff1a;为何需要一份权威榜单&#xff1f; 随着AI技术在学术领域的广泛应用&#xff0c;越来越多的MBA学生开始借助智能工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目的…

作者头像 李华
网站建设 2026/4/24 15:28:28

深度测评自考必备!8款一键生成论文工具TOP8全解析

深度测评自考必备&#xff01;8款一键生成论文工具TOP8全解析 自考论文写作的“好帮手”测评 随着自考人数逐年增加&#xff0c;论文写作成为许多考生面临的难题。从选题构思到资料收集&#xff0c;再到格式排版和内容润色&#xff0c;每一个环节都可能成为拖延或出错的源头。为…

作者头像 李华
网站建设 2026/5/1 5:06:50

为什么网络安全卷成这样,还被称为最有前途的工作之一?

作为网安界的“资深牛马”&#xff0c;我经常会去各大平台上看一些关于“网安”的文章和视频。看得最多的就是有人将网络安全专家列为未来十年最有竞争力的岗位之一&#xff0c;工资水平也位列薪资排行榜前十。 但是再看看当下的实际情况&#xff1a;大环境不算好&#xff0c;…

作者头像 李华
网站建设 2026/5/1 5:04:53

大模型时代AI产品经理指南:薪资50W+,如何快速入行?必收藏!

AI人才缺口达500万&#xff0c;AI产品经理薪资可观&#xff08;中位数36k/月&#xff0c;头部可达50W/年&#xff09;。AI产品经理分为专业型、应用型和工具型三类&#xff0c;普通人最适合从应用型入局。成功入行需掌握商业变现、需求把控、技术协作和AI项目落地能力。文章推荐…

作者头像 李华
网站建设 2026/5/1 5:04:36

白帽子黑客成长指南,从入门到进阶

大家也都知道&#xff0c;白帽子黑客相当于网络世界的 “正义卫士”&#xff0c;他们通过技术手段发现网络漏洞并协助修复&#xff0c;以保护系统和数据安全。 与利用漏洞窃取信息、破坏系统的 “黑帽黑客” 不同&#xff0c;白帽黑客始终在法律和道德框架内行动。白帽黑客的核…

作者头像 李华