能源化工行业,PHP大文件上传与断点续传的解决方案?

开发者日记:2024年X月X日 星期X 长沙 阴

项目背景
今日正式接手客户的大文件传输系统外包项目,需求明确:支持20G文件/文件夹上传下载、跨平台(Windows/macOS/Linux)、全浏览器兼容(含IE8)、断点续传、保留文件夹层级结构,后端PHP+MySQL,前端Vue3+WebUploader/H5,存储用阿里云OSS。客户要求免费开源代码和7*24小时支持,压力山大但挑战性十足。


技术选型与难点分析

  1. 前端框架

    • Vue3 CLI:组件化开发,响应式数据绑定。
    • WebUploader:兼容IE8+,支持分片上传,但需二次开发文件夹上传。
    • H5 File API:现代浏览器备用方案,需Polyfill兼容旧版。
  2. 后端架构

    • PHP:轻量级处理文件分片合并与OSS交互。
    • MySQL:存储文件元数据(路径、分片信息、断点记录)。
  3. 核心难点

    • 文件夹层级保留:需递归解析文件夹结构,生成JSON树形结构上传。
    • 断点续传:通过本地Storage+Server记录分片上传进度,重启后恢复。
    • 大文件分片:前端按4MB分片,后端合并后上传OSS。

前端代码实现(Vue3 + WebUploader)

1. 初始化WebUploader(兼容IE8)
// src/components/Uploader.vueimport{onMounted,ref}from'vue';importWebUploaderfrom'webuploader';import'webuploader/dist/webuploader.css';exportdefault{setup(){constuploader=ref(null);onMounted(()=>{// 动态加载Flash(IE8兼容)if(window.WebUploader&&!WebUploader.Uploader.support('HTML5')){constflashUrl='/path/to/Uploader.swf';WebUploader.Uploader.register({name:'flash',fn:()=>flashUrl});}uploader.value=newWebUploader.Uploader({swf:'/path/to/Uploader.swf',// IE8备用server:'/api/upload',pick:'#picker',chunked:true,chunkSize:4*1024*1024,// 4MB分片threads:3,formData:{fileId:'',// 由后端生成唯一IDisDir:false// 标记是否为文件夹},// 保留文件夹结构的关键:自定义文件对象accept:{title:'Files',extensions:'*',mimeTypes:'*'}});// 监听文件添加(处理文件夹)uploader.value.on('filesQueued',(files)=>{files.forEach(file=>{if(file.isDir){// 递归处理文件夹(需自定义逻辑)parseDirectory(file);}else{uploadFile(file);}});});});// 模拟文件夹解析(实际需调用WebUploader的目录选择API)constparseDirectory=(dirFile)=>{// 此处需结合H5 File System API或插件实现层级解析console.log('Folder structure:',dirFile.fullPath);};return{uploader};}};
2. 文件夹上传逻辑(H5 Fallback)
// 兼容现代浏览器的文件夹上传(IE8跳过)consthandleFolderInput=(event)=>{if(!window.File&&window.DirectoryReader)return;// 检测H5 API支持constfiles=[];constdirectoryReader=event.target.webkitGetAsEntry();// Chrome/Firefoxif(directoryReader&&directoryReader.isDirectory){constreader=directoryReader.createReader();reader.readEntries((entries)=>{entries.forEach(entry=>{if(entry.isFile){entry.file(file=>files.push(file));}elseif(entry.isDirectory){// 递归处理子目录handleFolderInput({target:{webkitGetAsEntry:()=>entry}});}});});}};

后端代码实现(PHP + MySQL)

1. 分片接收与合并
// api/upload.phpprepare("INSERT INTO upload_progress (file_id, chunk_index, total_chunks, uploaded_at) VALUES (?, ?, ?, NOW())");$stmt->execute([$fileId,$chunkIndex,$totalChunks]);// 如果是最后一块,合并并上传OSSif($chunkIndex===$totalChunks-1){$finalPath="{$tempDir}/final_file";$fp=fopen($finalPath,'wb');for($i=0;$i<$totalChunks;$i++){$chunkContent=file_get_contents("{$tempDir}/chunk_{$i}");fwrite($fp,$chunkContent);}fclose($fp);// 上传到阿里云OSS(需引入OSS SDK)require_once'oss-sdk/autoload.php';$ossClient=newOSS\OssClient('key','secret','endpoint');$ossClient->putObject('bucket-name',"uploads/{$fileId}",$finalPath);// 清理临时文件array_map('unlink',glob("{$tempDir}/*"));rmdir($tempDir);}echojson_encode(['success'=>true,'fileId'=>$fileId]);?>
2. MySQL表结构
CREATETABLEupload_progress(idINTAUTO_INCREMENTPRIMARYKEY,file_idVARCHAR(64)NOTNULL,chunk_indexINTNOTNULL,total_chunksINTNOTNULL,uploaded_atDATETIMENOTNULL,UNIQUEKEY(file_id,chunk_index));

断点续传实现

  1. 前端存储:使用localStorage记录未完成的fileIdchunkIndex
  2. 后端查询:上传前检查MySQL中已存在的分片,跳过已上传部分。
// 前端恢复上传逻辑constresumeUpload=(fileId)=>{fetch(`/api/check-progress?fileId=${fileId}`).then(res=>res.json()).then(data=>{if(data.completedChunks<data.totalChunks){uploader.value.option('formData',{fileId,chunk:data.completedChunks});uploader.value.upload();}});};

今日总结

  • 进展:完成基础分片上传逻辑,兼容性方案初步验证。
  • 问题
    1. WebUploader原生不支持文件夹层级解析,需结合H5 API或第三方插件(如webuploader-directory)。
    2. IE8的Flash上传稳定性需进一步测试。
  • 明日计划
    1. 实现完整的文件夹递归上传逻辑。
    2. 编写OSS上传模块和断点续传接口。

求助:若有大神熟悉WebUploader文件夹上传或OSS集成,欢迎加入QQ群374992201指导!代码将完全开源回馈社区。


(注:实际项目需补充安全校验、错误处理和性能优化代码。)

安装环境

PHP:7.2.14

调整块大小

NOSQL

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

SQL

创建数据库

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

配置数据库连接

安装依赖

访问页面进行测试

数据表中的数据

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

免费下载示例

点击下载完整示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1168561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据可视化实战技巧

数据可视化基础与MySQL的结合数据可视化的定义与重要性MySQL在数据处理中的角色常见数据可视化工具简介&#xff08;如Tableau、Power BI、Python库&#xff09;MySQL数据准备与清洗数据库连接与数据查询基础&#xff08;SELECT语句&#xff09;数据清洗技巧&#xff08;处理NU…

数据 “开口说话”!虎贲等考 AI 数据分析功能解锁论文实证新姿势

还在对着一堆调研数据无从下手&#xff1f;还在为 SPSS 操作界面抓狂到脱发&#xff1f;还在因图表不规范被导师连环批注&#xff1f;作为深耕论文写作科普的博主&#xff0c;后台每天都被科研党和毕业生的数据分析难题刷屏。别慌&#xff01;虎贲等考 AI 智能写作平台&#xf…

Elasticsearch Swarm 单机部署和测试流程

文章目录 📁 项目结构规划 📦 第一步:创建项目目录和文件 ⚙️ 第二步:创建配置文件 1. 创建 docker-compose.yml 2. 创建 Elasticsearch 自定义配置 3. 创建环境变量文件 🚀 第三步:创建部署脚本 1. 部署脚本 2. 测试脚本 3. 清理脚本 📄 第四步:创建使用说明 快速…

Google AI Studio+Gemini Pro:小白也能驾驭的AI魔法组合

引言 在当今这个 AI 技术飞速发展的时代,人工智能的应用已经渗透到了我们生活和工作的各个角落。从智能语音助手到图像识别技术,从自动化客服到智能驾驶,AI 的强大功能让我们的生活变得更加便捷和高效。其中,谷歌的 Gemini Pro 模型以其卓越的性能和广泛的应用场景,成为了…

TCP/IP协议栈:从原理到实战全解析

TCP/IP协议栈深度解析技术文章大纲协议栈概述TCP/IP协议栈的分层结构&#xff08;四层或五层模型&#xff09;与OSI七层模型的对比协议栈的核心设计思想网络接口层&#xff08;链路层&#xff09;以太网、Wi-Fi等底层协议的作用MAC地址与ARP协议解析数据帧的封装与解封装网络层…

突破限制:巧用Azure OpenAI,畅玩Gemini模型

引言 在人工智能飞速发展的当下,Gemini 模型凭借其强大的语言理解与生成能力,吸引了众多开发者的目光。然而,国内的网络环境使得直接访问 Gemini 模型困难重重,“魔法” 手段不仅操作复杂,还存在诸多风险。幸运的是,我们可以通过 Azure OpenAI 服务这一巧妙的途径,间接调…

【Python高级编程】辅助教师教学工具:PTA 成绩统计小程序

目录 一、引言 二、开发起点&#xff1a;需求挖掘与场景分析 三、方案设计&#xff1a;技术选型与架构规划 四、核心开发阶段&#xff1a;从 “能用” 到 “好用” 1. 基础能力搭建&#xff1a;先确保 “能读文件、能操作” 2. 核心逻辑开发&#xff1a;解决 “统计” 的…

解锁Gemini:Firebase平台合规调用AI模型实战全攻略

一、引言 在人工智能飞速发展的当下,Gemini 凭借其卓越的性能,成为众多开发者关注的焦点。作为谷歌旗下先进的 AI 模型,Gemini 在自然语言处理、图像识别等多领域展现出强大的能力,为开发者们打开了全新的应用开发思路。而 Firebase 作为谷歌提供的一套功能全面的后端即服务…

将本地代码推送到 GitHub 的方法

目录 一、准备工作 二、首次推送&#xff08;本地代码→新 GitHub 仓库&#xff09; 三、后续推送&#xff08;本地代码更新后→GitHub&#xff09; 四、常见问题及解决 五、总结 一、准备工作 安装 Git&#xff1a;从https://git-scm.com/下载并安装&#xff0c;安装后右…

亲测好用8个AI论文工具,助本科生轻松搞定毕业论文!

亲测好用8个AI论文工具&#xff0c;助本科生轻松搞定毕业论文&#xff01; AI 工具如何助力论文写作&#xff1f; 在当今信息爆炸的时代&#xff0c;撰写一篇高质量的毕业论文对于本科生来说&#xff0c;既是一次学术能力的考验&#xff0c;也是一场与时间赛跑的挑战。面对繁重…

汇川md380量产参考方案,包括原理图、PCB设计图及矢量源码:现成解决方案,轻松量产学习利器

汇川频器md380量产方案&#xff0c;包含原理图&#xff0c;pcb图&#xff0c;矢量源码。 拿来就用&#xff01;量产参考&#xff0c;学习提高&#xff0c;必备利器。MD380量产方案的硬件设计核心在电源模块和驱动电路。原理图里的三相整流部分用了六个二极管搭成全桥结构&#…

Bulk+ATAC+scRNA+TCR-seq+CUTTag+代谢+空间转录组:拆解Cell力作,掌握多组学联合分析(附代码)

作为人体内数量最多且反应迅速的防御细胞&#xff0c;中性粒细胞在癌症中究竟是“帮凶”还是“斗士”&#xff1f;长期以来&#xff0c;由于这类细胞半衰期极短、mRNA含量低&#xff0c;其在肿瘤微环境中的功能状态一直是个谜。。2024年3月14日&#xff0c;复旦大学附属中山医院…

告别绘图内卷!虎贲等考 AI 科研绘图功能让数据秒变顶刊级图表

还在为 Origin 参数调试到深夜&#xff1f;为 Visio 画示意图反复返工&#xff1f;为论文图表不符合期刊规范被打回修改&#xff1f;在科研圈&#xff0c;一张精准、规范、美观的图表&#xff0c;是论文的 “加分王牌”&#xff0c;却也是无数科研人的 “噩梦关卡”。传统绘图工…

在线教程丨Qwen-Image-2512正式开源,告别AI生图塑料感,仅需文字指令实现真实毛发

一直以来&#xff0c;开源图像生成模型虽能快速出图&#xff0c;但在追求极致真实感&#xff0c;尤其在处理人像和复杂自然场景时&#xff0c;往往不尽如人意。生成的人脸常有「塑料感」或五官模糊&#xff0c;皮肤缺乏真实纹理。对于自然风光&#xff0c;模型在表现水体、植被…

工业物联网关在管网、泵站、水厂等智慧水务场景的应用

场景痛点&#xff1a;供水管网漏损率高、泵站/水厂依赖人工值守、农村饮用水安全监测难、防汛排涝响应慢……传统水务管理方式面临效率、安全和成本的巨大挑战。设施分布广泛、偏远&#xff0c;维护巡检困难&#xff0c;数据获取不及时&#xff0c;严重影响供水安全与运营效率。…

学长亲荐!专科生必备TOP10一键生成论文工具测评

学长亲荐&#xff01;专科生必备TOP10一键生成论文工具测评 2026年专科生论文写作工具测评&#xff1a;为什么你需要这份榜单 随着高校教育的不断深化&#xff0c;专科生在学术写作上的要求也日益提高。然而&#xff0c;面对繁重的课程任务和有限的写作经验&#xff0c;许多学生…

企业供应商分级总停滞?供应商管理系统这 3 个功能帮你理顺分级流程

企业的供应商分级&#xff0c;明明有潜在、合格、核心、战略这样的分类&#xff0c;实际操作时却经常停滞不前。采购总是随意下单&#xff0c;管理层以为分级在起作用&#xff0c;其实只是表格上的文字。很多企业用 Excel、Word 或邮件管理供应商&#xff0c;表面上看起来有流程…

人工磨问卷 3 天 vs 虎贲等考 AI30 分钟:实证研究效率差在哪?

还在为一份学术问卷熬秃脑袋&#xff1f;花 3 天查文献、抠题项&#xff0c;回收的数据却因信效度不达标被导师打回&#xff1f;用 Excel 手动录入数据&#xff0c;熬到凌晨才做出一张歪歪扭扭的图表&#xff1f; 在实证研究越来越卷的今天&#xff0c;问卷设计早已不是 “随便…

开题报告零返工!虎贲等考 AI:一键搭建导师认可的学术骨架

开题报告改到崩溃&#xff1f;选题太泛被批 “无研究价值”、文献综述写成 “流水账”、技术路线图杂乱无章…… 这些堪称学术萌新的 “开题魔咒”&#xff0c;每年都让无数毕业生陷入 “写了改、改了毙” 的死循环。其实&#xff0c;一份能让导师眼前一亮的开题报告&#xff0…

AI 写论文哪个软件最好?实测封神!虎贲等考 AI 凭硬核实力成毕业刚需

毕业季的论文战场&#xff0c;“AI 写论文哪个软件最好” 的灵魂拷问&#xff0c;让无数毕业生挑花了眼。有人踩坑 “虚假文献生成器”&#xff0c;有人吐槽 “降重后逻辑全乱”&#xff0c;还有人被 “AI 痕迹检测” 难住。作为深耕论文写作科普的博主&#xff0c;我测评过十余…