news 2026/4/17 21:44:50

PHP国防军工大附件上传时进度条如何设计?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP国防军工大附件上传时进度条如何设计?

2023年10月25日 星期三 多云转晴
毕业设计攻坚日记 - 大文件管理系统Day1


需求分析与技术选型

今天正式启动文件管理系统的毕业设计。核心需求很明确:

  1. 大文件传输:10G文件需分片上传,需兼容IE8(地狱级难度)
  2. 加密:传输层TLS+存储层AES-256双重加密
  3. 断点续传:浏览器关闭后进度不丢失(IndexedDB+LocalStorage降级方案)
  4. 文件夹结构:递归读取+路径映射表

技术组合

  • 前端:Vue3 CLI + WebUploader(兼容H5 fallback)
  • 后端:PHP分片合并 + OSS直传签名
  • 数据库:MySQL记录文件元信息

关键代码片段

前端:分片上传逻辑(WebUploader + IndexedDB)
// WebUploader初始化(兼容IE8)constuploader=WebUploader.create({server:'/api/upload_chunk.php',fileSizeLimit:10*1024*1024*1024,// 10GBchunkSize:5*1024*1024,// 5MB分片duplicate:true,disableGlobalDnd:true,// IE8必须prepareNextFile:true});// 断点信息存储(优先IndexedDB)functionsaveProgress(fileId,chunks){if('indexedDB'inwindow){constdbRequest=indexedDB.open('UploadDB',1);dbRequest.onsuccess=(e)=>{constdb=e.target.result;consttx=db.transaction('progress','readwrite');tx.objectStore('progress').put({fileId,chunks});};}else{localStorage.setItem(`upload_${fileId}`,JSON.stringify(chunks));}}
后端:PHP分片合并(OSS直传优化)
// upload_chunk.php$fileId=$_POST['fileId'];$chunkIndex=$_POST['chunkIndex'];$totalChunks=$_POST['totalChunks'];// 加密分片存储(AES-256-CBC)$encryptedChunk=openssl_encrypt(file_get_contents($_FILES['file']['tmp_name']),'aes-256-cbc','your_encryption_key',0,'initialization_vector');file_put_contents("/tmp/{$fileId}_{$chunkIndex}.part",$encryptedChunk);// 判断是否合并if($chunkIndex==$totalChunks-1){$ossClient=newOSS\OssClient(/* OSS配置 */);$finalPath="/user_uploads/{$fileId}.dat";// 合并所有分片for($i=0;$i<$totalChunks;$i++){$chunkData=file_get_contents("/tmp/{$fileId}_{$i}.part");file_put_contents("/tmp/{$fileId}_final",$chunkData,FILE_APPEND);}// 上传至OSS$ossClient->uploadFile('your-bucket',$finalPath,"/tmp/{$fileId}_final");echojson_encode(['status'=>'success']);}

今日踩坑记录

  1. IE8兼容性问题

    • WebUploader的Flash模式需要手动部署swf文件
    • 解决方案:在public目录放置webuploader.flash.swf并配置swf: '/static/webuploader.flash.swf'
  2. 文件夹结构递归

    • 使用webkitRelativePath属性获取相对路径(非IE浏览器)
    • IE8需通过``的替代方案(已放弃,改用Zip预处理)

明日计划

  1. 实现离线进度恢复的完整Demo
  2. 研究国产浏览器(龙芯/红莲花)的测试方案
  3. 联系校友群(已加QQ群374992201)询问工作内推

PS:有西安华为OD的学长联系我,要求提供毕业设计演示视频——得加快进度了!

(日记风格建议:技术细节+个人情绪+进度追踪,保持真实感)

如果需要更完整的代码库或架构设计图,可以进一步讨论!

安装环境

PHP:7.2.14

调整块大小

NOSQL

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

SQL

创建数据库

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

配置数据库连接

安装依赖

访问页面进行测试

数据表中的数据

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

免费下载示例

点击下载完整示例

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

律师文书助手:Fun-ASR高效处理访谈录音实操

律师文书助手&#xff1a;Fun-ASR高效处理访谈录音实操 在律师事务所的日常工作中&#xff0c;律师与当事人的面谈、调解现场记录、专家证言采集、庭审旁听速记等场景&#xff0c;每天都会产生大量语音素材。过去&#xff0c;这些录音往往需要助理手动听写数小时&#xff0c;或…

作者头像 李华
网站建设 2026/4/18 3:52:01

Ollama部署DeepSeek-R1-Distill-Qwen-7B保姆级教程:零基础快速上手

Ollama部署DeepSeek-R1-Distill-Qwen-7B保姆级教程&#xff1a;零基础快速上手 你是不是也试过下载大模型、配环境、调依赖&#xff0c;结果卡在报错里一整天&#xff1f;是不是看到“Qwen”“DeepSeek”“蒸馏”这些词就下意识想关网页&#xff1f;别急——这次我们不讲原理、…

作者头像 李华
网站建设 2026/4/18 3:49:22

embeddinggemma-300m部署教程:Ollama+Kubernetes生产环境编排方案

embeddinggemma-300m部署教程&#xff1a;OllamaKubernetes生产环境编排方案 1. 为什么选择embeddinggemma-300m做向量服务 在构建现代搜索、推荐或RAG&#xff08;检索增强生成&#xff09;系统时&#xff0c;高质量的文本嵌入能力是底层基石。很多团队一开始会选Sentence-B…

作者头像 李华
网站建设 2026/3/20 3:37:55

LightOnOCR-2-1B体验:表格、收据识别效果实测

LightOnOCR-2-1B体验&#xff1a;表格、收据识别效果实测 1. 开箱即用&#xff1a;三分钟跑通第一个收据识别任务 你有没有过这样的经历——手头堆着几十张超市小票、快递单、水电缴费凭证&#xff0c;每张都得手动敲进Excel&#xff1f;或者财务同事反复截图发来模糊的银行回…

作者头像 李华
网站建设 2026/4/16 8:29:03

AI驱动的高频投诉测试用例生成框架

高频投诉测试用例指针对用户反馈中重复出现的核心问题&#xff08;如支付失败、界面崩溃等&#xff09;设计的验证场景。传统方法依赖人工梳理反馈&#xff0c;耗时长且易遗漏边缘情况&#xff1b;而AI通过自然语言处理&#xff08;NLP&#xff09;与机器学习&#xff0c;实现“…

作者头像 李华
网站建设 2026/4/17 22:01:34

Ollama+EmbeddingGemma-300m:轻松实现文本分类与聚类

OllamaEmbeddingGemma-300m&#xff1a;轻松实现文本分类与聚类 你有没有遇到过这样的问题&#xff1a;手头有一堆用户评论、产品反馈或客服对话&#xff0c;想快速知道它们在说什么&#xff0c;哪些内容相似&#xff0c;哪些属于不同类别&#xff1f;但又不想搭复杂的向量数据…

作者头像 李华