如何在网页中实现跨平台的大文件切片上传?

一个被20G文件折磨的.NET程序员的求生指南

“甲方爸爸说要兼容IE8?还要20G文件上传?预算100块?” —— 当我看到需求文档时,手里的泡面突然就不香了…🍜

技术方案:在刀尖上跳舞

前端部分:与IE8老爷爷斗智斗勇

// 文件分片上传核心代码(纯手工打造,兼容IE8版)functionuploadFile(file){// IE8特供版检测if(navigator.userAgent.indexOf('MSIE 8.0')>-1){alert('尊敬的用户,检测到您正在使用IE8,我们将为您启用特殊兼容模式...');// 其实就是降级方案...returnie8SpecialUpload(file);}constCHUNK_SIZE=5*1024*1024;// 5MB一片letchunks=Math.ceil(file.size/CHUNK_SIZE);letuploaded=0;// 加密相关(SM4/AES)letcrypto=newSuperCrypto('SM4');// 这个类当然是我编的...for(leti=0;i<chunks;i++){letstart=i*CHUNK_SIZE;letend=Math.min(start+CHUNK_SIZE,file.size);letchunk=file.slice(start,end);// 加密分片letencryptedChunk=crypto.encrypt(chunk);letformData=newFormData();formData.append('file',encryptedChunk);formData.append('chunkIndex',i);formData.append('totalChunks',chunks);formData.append('fileName',file.name);formData.append('fileSize',file.size);// 这里应该是AJAX调用,但为了兼容IE8...letxhr=newXMLHttpRequest();xhr.open('POST','/api/upload',true);xhr.onload=function(){uploaded++;updateProgress(uploaded/chunks*100);saveProgressToLocalStorage(file.name,uploaded);};xhr.send(formData);}}// IE8特供版上传(Flash后备方案)functionie8SpecialUpload(file){// 这里应该有Flash上传代码...alert('请安装Flash Player 10.1或更高版本');returnfalse;}

后端部分:C# WebForm的救赎

// UploadHandler.ashx 文件上传处理publicclassUploadHandler:IHttpHandler{publicvoidProcessRequest(HttpContextcontext){try{// 获取上传的文件分片HttpPostedFilefile=context.Request.Files["file"];intchunkIndex=int.Parse(context.Request["chunkIndex"]);inttotalChunks=int.Parse(context.Request["totalChunks"]);stringfileName=context.Request["fileName"];longfileSize=long.Parse(context.Request["fileSize"]);// 解密处理byte[]fileData=newbyte[file.InputStream.Length];file.InputStream.Read(fileData,0,fileData.Length);byte[]decryptedData=CryptoHelper.SM4Decrypt(fileData,"密钥");// 临时保存分片stringtempPath=Path.Combine("E:\\UploadTemp",fileName);if(!Directory.Exists(tempPath))Directory.CreateDirectory(tempPath);stringchunkPath=Path.Combine(tempPath,chunkIndex.ToString());File.WriteAllBytes(chunkPath,decryptedData);// 检查是否所有分片都已上传if(Directory.GetFiles(tempPath).Length==totalChunks){// 合并文件MergeFile(tempPath,"E:\\Uploads\\"+fileName);Directory.Delete(tempPath,true);// 记录到数据库SaveToDb(fileName,fileSize,"E:\\Uploads\\"+fileName);}context.Response.Write("{\"status\":\"ok\"}");}catch(Exceptionex){context.Response.Write("{\"status\":\"error\",\"message\":\""+ex.Message+"\"}");}}privatevoidMergeFile(stringtempPath,stringtargetPath){// 这里应该有合并文件的代码...}privatevoidSaveToDb(stringfileName,longfileSize,stringfilePath){// 这里应该有数据库操作代码...}}

开发血泪史

  1. IE8兼容性:我尝试了各种黑魔法,最后发现唯一的解决方案是…建议用户换电脑(当然这话不能跟甲方说)

  2. 20G文件上传:我的开发机只有256G SSD,测试时差点把自己电脑搞崩溃

  3. 加密传输:SM4在JavaScript端的实现让我掉了不少头发

文件夹上传的终极解决方案

// 文件夹上传保留层级结构functionuploadFolder(event){letfiles=event.target.files;letfolderStructure={};// 构建文件夹结构for(leti=0;i<files.length;i++){letfile=files[i];if(file.webkitRelativePath){letpaths=file.webkitRelativePath.split('/');letcurrentLevel=folderStructure;for(letj=0;j<paths.length-1;j++){if(!currentLevel[paths[j]]){currentLevel[paths[j]]={};}currentLevel=currentLevel[paths[j]];}currentLevel[paths[paths.length-1]]=file;}}// 递归上传uploadFolderItem(folderStructure,'');}functionuploadFolderItem(item,currentPath){for(letkeyinitem){if(item[key]instanceofFile){// 上传文件uploadFile(item[key],currentPath);}else{// 创建文件夹createFolderOnServer(currentPath+key+'/');// 递归上传子项uploadFolderItem(item[key],currentPath+key+'/');}}}

数据库设计(SQL Server版)

-- 文件记录表CREATETABLEFileRecords(Id UNIQUEIDENTIFIERPRIMARYKEYDEFAULTNEWID(),FileName NVARCHAR(255)NOTNULL,FileSizeBIGINTNOTNULL,FilePath NVARCHAR(MAX)NOTNULL,UploadTimeDATETIMEDEFAULTGETDATE(),IsEncryptedBITDEFAULT1,EncryptionType NVARCHAR(50)DEFAULT'SM4');-- 上传进度表(用于断点续传)CREATETABLEUploadProgress(SessionId NVARCHAR(255)PRIMARYKEY,FileName NVARCHAR(255)NOTNULL,FileMd5 NVARCHAR(255)NOTNULL,TotalChunksINTNOTNULL,UploadedChunksINTNOTNULL,LastUpdateTimeDATETIMEDEFAULTGETDATE());

给甲方爸爸的温馨Tips

  1. 关于IE8:真的不考虑升级一下吗?现在连微软都不支持IE8了…

  2. 关于20G文件:建议上传前先压缩,毕竟您家宽带上传20G可能需要一整天

  3. 关于100块预算:这个价格我们只能提供"心灵支持"服务了…

PS:那个QQ群真的存在,但红包可能已经被抢光了。至于"一个项目提成1万"…醒醒,该搬砖了!👷

设置框架

安装.NET Framework 4.7.2
https://dotnet.microsoft.com/en-us/download/dotnet-framework/net472
框架选择4.7.2

添加3rd引用

编译项目

NOSQL

NOSQL无需任何配置可直接访问页面进行测试

SQL

使用IIS
大文件上传测试推荐使用IIS以获取更高性能。

使用IIS Express

小文件上传测试可以使用IIS Express

创建数据库

配置数据库连接信息

检查数据库配置

访问页面进行测试


相关参考:
文件保存位置,

下载完整示例

下载完整示例

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

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

相关文章

信创环境下如何选择合适的大文件上传插件?

大文件传输系统建设方案&#xff08;ASP.NET技术栈&#xff09; 一、项目背景与核心需求 作为公司项目负责人&#xff0c;针对产品部门提出的100G级大文件传输需求&#xff0c;需构建一套高兼容性、高稳定性、全浏览器支持的解决方案。核心需求如下&#xff1a; 功能需求&…

信任链重构:当AI成为品牌与消费者之间的“信任中介”

引言&#xff1a;信息环境剧变下的信任新课题 设想两位潜在车主的研究路径&#xff1a;一位通过传统搜索引擎&#xff0c;浏览多家汽车媒体评测、综合论坛车主口碑&#xff0c;耗时良久后得出结论“品牌X的自动驾驶功能比较可靠”。另一位则向AI助手提问&#xff1a;“当前20-…

WordPress开发者如何自定义Word导入的格式映射规则?

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…

政务站群如何配置WordPress实现PDF目录结构化提取?

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…

农业信息化平台如何通过WordPress处理Excel批量导入?

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…

智能制造MES系统如何调用WordPress的PPT转码接口?

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…

aepic.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

安可测评1月更新!鸿蒙系统入选!国产CPU、操作系统、数据库合集

安可测评清单是由中国信息安全测评中心和国家保密科技测评中心发布的通过安全可靠测评的产品清单&#xff0c;主要面向计算机终端和服务器搭载的中央处理器&#xff08;CPU&#xff09;、人工智能训练推理芯片、操作系统、数据库&#xff0c;以及激光或喷墨打印机搭载的主控芯片…

2025年索具品牌口碑排行,链条索具优选来啦,钢卷吊具/吊装带/组装型索具/成套索具/吊具/环形吊带,索具生产商联系方式 - 品牌推荐师

行业洞察:链条索具市场面临“技术升级与场景适配”双重挑战 随着工业4.0时代对吊装设备“高安全、高效率、高适配”需求的持续攀升,链条索具行业正经历结构性变革。传统产品因材质单一、定制能力不足、售后响应滞后等…

R语言森林生态系统结构、功能与稳定性全流程分析——群落多样性、机器学习、SEM与时间序列建模

R语言凭借其强大的统计计算、可视化与建模能力&#xff0c;为森林生态研究提供了系统而灵活的工具支持。从生物多样性评估、空间格局分析&#xff0c;到机器学习预测、结构方程建模&#xff0c;再到时间序列稳定性追踪&#xff0c;R语言能够整合多源数据&#xff0c;构建多层次…

AI智能办公鼠标服务哪家靠谱,南方网通鸿容鼠标是优选 - 工业品牌热点

2026年AI智能硬件市场爆发式增长,AI办公鼠标作为连接办公效率提升与营销场景落地的核心入口,已成为企业降本增效、个人突破生产力瓶颈的必备工具。无论是五合一大模型集成的全场景适配能力、AI语音与会议记录的高效办…

用Keras轻量化部署医疗模型稳推理

&#x1f4dd; 博客主页&#xff1a;jaxzheng的CSDN主页 轻量化医疗模型的稳推理&#xff1a;Keras框架下的实践与前瞻目录轻量化医疗模型的稳推理&#xff1a;Keras框架下的实践与前瞻 引言&#xff1a;医疗AI部署的核心隐忧 医疗AI轻量化部署的现状与挑战 稳推理&#xff1a;…

前后端分离架构,全功能社区论坛小程序商业运营源码系统

温馨提示&#xff1a;文末有资源获取方式尊敬的读者&#xff0c;您是否在寻找一款能提升企业运营效率的社区论坛小程序系统&#xff1f;那么&#xff0c;您来对地方了&#xff01;我们推荐的这款源码系统&#xff0c;专为网络建站公司、IT工作室及创业者设计&#xff0c;提供多…

示波器中电压有效值(Vrms)和峰峰值(Vpp)的关系

这是一个在电子测量中非常核心的概念&#xff0c;下面来详细解释示波器中电压有效值和峰峰值的关系。 核心总结 示波器直接显示的是电压的瞬时波形&#xff0c;最直观读出的参数是 峰峰值。有效值 是一个基于信号功率的等效直流电压值&#xff0c;需要通过公式计算得出。两者之…

为何需要“电压有效值”

这个问题&#xff0c;触及了电力、电子和测量技术的核心。简单来说&#xff0c;我们需要“电压有效值”是因为它是衡量交流电“实际做功能力”或“等效破坏力”的统一、科学的标尺。 它不是一个为了计算而计算的抽象数学概念&#xff0c;而是解决实际工程问题的关键。以下是几个…

【大白专访09下】80万美金自营账户准备稳定出金时,平台却倒闭了

文章来源&#xff1a;123财经导航/大白EA宝库【大白小月编者按】书接上回。在上篇访谈中&#xff0c;深圳交易员Time分享了他作为百万年薪中产的焦虑&#xff0c;以及“顺势马丁人工强损”的策略逻辑。对于一个成熟的交易员来说&#xff0c;策略只是术&#xff0c;看懂规则、算…

2026年盘点比较好的税务风险管控专业公司,天津捷瑞通排第几? - 工业品牌热点

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为企业选型提供客观依据,助力精准匹配适配的财税服务伙伴。 TOP1 推荐:天津捷瑞通(天津)税务师事务所有限公司 推荐指数:★★★★★ | 口碑评分…

2026国内最新天然留香香精生产厂家top5推荐!广东广州优质品牌及厂商全面解析,助力日化香氛行业高效选品 - 品牌推荐2026

引言 随着消费升级与日化、香氛市场的蓬勃发展,香精香料作为核心原料,其品质稳定性、香型适配性与合规安全性成为企业竞争的关键。据中国日用化工协会2025年度报告显示,国内香精香料市场规模突破800亿元,但行业存在…

深圳金鑫磁材|坡莫合金取电线圈:含钼5%第三代极端环境解决方案

在新能源汽车800V高压平台、5G基站毫米波电源模块、MRI医疗影像设备等尖端领域&#xff0c;一种名为"坡莫合金取电线圈"的核心元件正以"隐形冠军"的姿态支撑着技术突破。这种由铁镍基合金打造的电磁组件&#xff0c;凭借其超高的磁导率和精准的磁场调控能力…

《把脉行业与技术趋势》-64-何为方向正确:方向是未来的目标,当种群生命的周期、国家宏观政策的生命周期、行业发展的生命周期、企业发展的周期、产品的发展生命周期、个人的职业操作周期,完全契合了,便是正确

一、方向的本质&#xff1a;不是路径&#xff0c;而是势能的汇聚点 方向并非一条固定路线&#xff0c;而是一个动态的、多维共振的目标状态。 单靠个人努力&#xff08;如加班、学习&#xff09;若脱离时代趋势&#xff0c;可能只是“高效地跑偏”&#xff1b;而当你的行动恰…