网页免费建站wordpress 新闻门户

张小明 2025/12/30 15:51:40
网页免费建站,wordpress 新闻门户,wordpress 中文付费主题,广西住房与建设厅网站《一个Java老码农的20G文件夹上传历险记》 大家好#xff0c;我是老王#xff0c;一个在西安写了15年Java的老程序员。最近接了个外包项目#xff0c;需求简单概括就是#xff1a;“用IE9上传20G文件夹#xff0c;预算100块还要724小时支持”——这感觉就像是让我用自行车…《一个Java老码农的20G文件夹上传历险记》大家好我是老王一个在西安写了15年Java的老程序员。最近接了个外包项目需求简单概括就是“用IE9上传20G文件夹预算100块还要7×24小时支持”——这感觉就像是让我用自行车送外卖还要求时速120公里甲方需求 vs 程序员现实甲方“老王啊我们要做个文件上传系统…”我“没问题这个我熟”甲方“要支持20G文件夹上传保留层级结构要加密…”我“小case”甲方“预算100块包干含源码文档和技术支持…”我“老板我突然想起我家煤气灶还没关…”// 预算检测工具类publicclassBudgetValidator{publicstaticvoidcheck(doublebudget){if(budget10000){thrownewInsufficientBudgetException(您的预算仅够买(int)(budget/3)杯蜜雪冰城);}}}技术选型贫穷版前端方案IE9兼容使用 递归读取大文件上传分片上传 本地存储记录进度加密在内存中加密后上传AES/SM4// IE9文件夹上传核心代码functionhandleIEFolderUpload(files){if(!files){alert(请使用Chrome浏览器以获得更好体验或者加钱);return;}letfileCount0;for(leti0;ifiles.length;i){constfilefiles[i];// 假装处理了文件夹结构constfakePathfile.name.replace(/\\/g,/);uploadFile(file,fakePath);fileCount;}console.log(成功上传了${fileCount}个文件可能丢失了层级关系);}后端方案SpringBoot接收分片文件阿里云OSS直传 分片合并数据库记录文件树结构// 文件信息实体丐版EntitypublicclassFileInfo{IdprivateStringid;privateStringfileName;privateStringfilePath;// 例如 /root/folder1/file.txtprivateLongfileSize;privateBooleanisDirectory;// 省去getter/setter...}// 上传控制器简化版RestControllerRequestMapping(/api/upload)publicclassUploadController{PostMappingpublicStringupload(RequestParamMultipartFilefile,RequestParamStringrelativePath){// 1. 加密存储假装很安全byte[]encryptedencrypt(file.getBytes());// 2. 保存到阿里云OSSStringossPathuser_uploads/UUID.randomUUID();ossClient.putObject(bucketName,ossPath,newByteArrayInputStream(encrypted));// 3. 记录文件结构FileInfofileInfonewFileInfo();fileInfo.setFilePath(relativePath);fileRepository.save(fileInfo);returnsuccess;}privatebyte[]encrypt(byte[]data){// 这里应该用AES/SM4但预算只够写个伪代码returndata;// 假装加密了}}文件夹结构保持方案前端处理// 递归读取文件夹现代浏览器asyncfunctionreadDirectory(directory){constfiles[];forawait(constentryofdirectory.values()){if(entry.isDirectory){constsubFilesawaitreadDirectory(entry);subFiles.forEach(f{f.relativePathentry.name/f.relativePath;files.push(f);});}else{files.push({file:awaitentry.getFile(),relativePath:entry.name});}}returnfiles;}后端存储-- 文件结构存储表CREATETABLEfile_structure(idvarchar(64)NOTNULL,file_namevarchar(255)NOTNULL,file_pathvarchar(1024)NOTNULLCOMMENT完整路径如/root/folder/file.txt,parent_idvarchar(64)DEFAULTNULLCOMMENT父目录ID,is_directorytinyint(1)NOTNULLDEFAULT0,PRIMARYKEY(id),KEYidx_parent(parent_id))ENGINEInnoDBDEFAULTCHARSETutf8mb4;断点续传实现前端关键代码// 断点续传管理器classResumeUploader{constructor(){this.chunks{};}// 开始上传asyncupload(file){constfileIdthis.generateFileId(file);constchunkSize5*1024*1024;// 5MB分片constchunksMath.ceil(file.size/chunkSize);// 从本地恢复进度constsavedProgresslocalStorage.getItem(upload_${fileId});if(savedProgress){this.chunks[fileId]JSON.parse(savedProgress);}else{this.chunks[fileId]{uploaded:0,total:chunks};}// 上传剩余分片for(letithis.chunks[fileId].uploaded;ichunks;i){constchunkfile.slice(i*chunkSize,(i1)*chunkSize);awaitthis.uploadChunk(fileId,chunk,i);// 更新进度this.chunks[fileId].uploaded;localStorage.setItem(upload_${fileId},JSON.stringify(this.chunks[fileId]));}}}后端分片处理// 分片上传控制器RestControllerRequestMapping(/api/chunk)publicclassChunkUploadController{PostMappingpublicStringuploadChunk(RequestParamStringfileId,RequestParamIntegerchunkNumber,RequestParamMultipartFilechunk){// 1. 临时存储分片StringchunkPath/tmp/uploads/fileId/chunkNumber;Files.write(Paths.get(chunkPath),chunk.getBytes());// 2. 检查是否所有分片都上传完成if(isUploadComplete(fileId)){mergeChunks(fileId);}returnsuccess;}privatebooleanisUploadComplete(StringfileId){// 这里应该查询数据库或文件系统// 但预算只够返回truereturntrue;}}浏览器兼容处理重点照顾IE9// 浏览器兼容层constFileUploader{// 现代浏览器上传modernUpload:async(files){// 使用File API实现},// IE9专属上传ie9Upload:(files){// 使用ActiveXObject实现try{constfsonewActiveXObject(Scripting.FileSystemObject);alert(检测到您在使用IE9建议\n1. 升级浏览器\n2. 加钱);returnthis.fakeUpload(files);}catch(e){alert(IE9都没装全您这预算是不是该再加个0);}},// 假装上传成功fakeUpload:(files){return{success:true,message:上传成功可能丢失了部分文件};}};部署方案100元特别版# 部署脚本budget_deploy.shecho正在部署价值100元的20G文件上传系统...echo1. 关闭所有安全组规则省防火墙钱echo2. 使用阿里云最便宜实例共享型xn4echo3. 数据库使用本地MySQL省RDS钱echo4. 关闭所有日志记录省磁盘钱echo部署完成记得每天凌晨3点手动重启释放内存给同行的忠告兄弟们这个需求我最后是这么处理的用WebUploader的文件夹上传功能IE9用Flash方案层级结构用字符串路径保存断点续传用localStorage服务端记录加密跟甲方说肉眼不可见的量子加密最后报价单基础功能100元IE9兼容加个020G支持再加个07×24支持继续加0最终我决定把甲方推荐给了群里做前端的张老三自己拿20%介绍费美滋滋欢迎加入我们夕阳红程序员接单群(QQ:374992201)群里定期分享《如何委婉拒绝甲方》话术大全《从Java到烧烤摊》转型指南价值百万的文件上传系统源码限时特价99元现在入群还能参与最惨甲方需求评选大赛冠军将获得老王的二手机械键盘一个空格键不太灵价值连城的《程序员防脱发指南》电子版群内大佬免费职业规划咨询一次可能建议你转行导入项目导入到Eclipse点南查看教程导入到IDEA点击查看教程springboot统一配置点击查看教程工程NOSQLNOSQL示例不需要任何配置可以直接访问测试创建数据表选择对应的数据表脚本这里以SQL为例修改数据库连接信息访问页面进行测试文件存储路径up6/upload/年/月/日/guid/filename效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。下载示例点击下载完整示例
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

如何查看网站关键词做网站租用那个服务器好

终极电量管理神器:AirBattery让你的Mac变身设备电量指挥中心 【免费下载链接】AirBattery Get the battery level of all your devices on your Mac and put them on the Dock / Status Bar / Widget! && 在Mac上获取你所有设备的电量信息并显示在Dock / 状…

张小明 2025/12/29 4:52:41 网站建设

做网站维护需要学什么互联网门户网站是什么

你是否曾经面对这些扫描图像处理难题而束手无策?扫描的文档总是歪歪斜斜,页面边界模糊不清,双页扫描无法准确分割,图像质量差强人意?这些问题正是Scan Tailor要为你解决的痛点。 【免费下载链接】scantailor 项目地…

张小明 2025/12/29 4:52:39 网站建设

国内网站做网站设计服务商

早上有客户咨询——说他现在能从本地用127.0.0.1:10000拿到EasyGBS的FLV直播流,但这本地IP只能自己电脑用,想换成实际IP让外部设备也能访问,不知道咋操作。我一看这问题挺常见的,直接跟他说:“你把地址里的127.0.0.1换…

张小明 2025/12/29 4:52:37 网站建设

电子商务网站建设的风险分析网络营销渠道的类型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个基于Java和OpenCV的图像处理项目代码,要求实现以下功能:1.读取本地图片;2.使用OpenCV进行人脸检测;3.在检测到的人脸区域绘…

张小明 2025/12/29 4:52:35 网站建设

红色网站 后台深圳公租房

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

张小明 2025/12/29 4:52:33 网站建设

一般网站开发的硬件要求公司做网站让拍照备案

PaddlePaddle表格识别TableRec:结构化数据提取方案 在企业数字化转型的浪潮中,一个看似不起眼却极为关键的问题正日益凸显——如何高效、准确地从成千上万张发票、合同、报表等文档中提取表格信息。传统人工录入不仅耗时费力,还容易出错&…

张小明 2025/12/29 7:17:41 网站建设