C#代码示例:如何在网页上实现机械制造行业的大文件秒传?

文件管理系统毕业设计:从IE8兼容到百万梦想的奇幻漂流

大家好,我就是那个被IE8折磨到怀疑人生的通讯专业大三狗。本来以为做个文件管理系统毕业设计撑死两周搞定,没想到这项目直接让我体验了一把"全栈工程师"的酸爽人生。

需求分析:我的毕业设计规格比阿里云还高

老师看完需求文档后的表情be like:😏 → 🤔 → 😨 → 🤯

  1. 10G文件上传:我家NAS都没这么大容量
  2. IE8兼容:这浏览器比我表弟年龄还大
  3. 信创全家桶:红莲花浏览器?这名字听着就像要渡我成佛
  4. 断点续传持久化:要求比我的婚姻观还坚定(虽然我母胎solo)
  5. 文件夹层级保留:这功能百度网盘SVIP都要加钱吧?

技术选型:从现代到复古的时空穿越

// 前端大文件上传核心逻辑 (原生JS + WebUploader)classMegaUploader{constructor(){this.uploader=null;this.ieMode=this.detectIE();// 检测IE版本this.initUploader();}// IE版本检测(比检测新冠病毒还复杂)detectIE(){constua=window.navigator.userAgent;constmsie=ua.indexOf('MSIE ');if(msie>0)returnparseInt(ua.substring(msie+5,ua.indexOf('.',msie)),10);returnfalse;}initUploader(){if(this.ieMode&&this.ieMode<=9){// IE专属Flash方案(仿佛回到2010年)this.initFlashUploader();}else{// 现代浏览器H5方案this.initH5Uploader();}}// H5上传方案(主推)initH5Uploader(){this.uploader=newWebUploader.create({// 基础配置dnd:'#filePicker',disableGlobalDnd:true,paste:document.body,swf:'/static/Uploader.swf',// 给IE准备的备胎server:'/api/upload',fileSizeLimit:10*1024*1024*1024,// 10GBfileSingleSizeLimit:5*1024*1024*1024,// 5GB单文件限制// 分片配置chunked:true,chunkSize:2*1024*1024,// 2MB每片threads:3,// 并发数chunkRetry:2,// 失败重试// 文件夹上传配置duplicate:true,accept:{title:'Files',extensions:'*',mimeTypes:'*'}});this.bindEvents();}// 绑定事件(比绑螃蟹还复杂)bindEvents(){// 文件添加事件this.uploader.on('fileQueued',file=>{console.log(`文件${file.name}已添加,大小${this.formatSize(file.size)}`);this.saveToIndexedDB(file);// 持久化存储文件信息});// 分片上传前加密this.uploader.on('uploadBeforeSend',(block,data)=>{data.chunk=block.chunk;data.chunks=block.chunks;data.fileId=block.file.id;data.token=this.generateToken(block.file);});// 上传进度this.uploader.on('uploadProgress',(file,percentage)=>{this.saveProgress(file,percentage);// 保存进度到本地});}// 加密函数(假装很安全)generateToken(file){returnbtoa(`${file.name}:${file.size}:${Date.now()}`);}// 更多方法...}

后端C#处理:老将新传

// UploadHandler.ashx 文件分片处理 (C# WebForm)publicclassUploadHandler:IHttpHandler{publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType="application/json";try{// 验证Tokenif(!ValidateToken(context.Request["token"])){context.Response.Write(JsonConvert.SerializeObject(new{error="非法请求"}));return;}varchunk=context.Request["chunk"]!=null?int.Parse(context.Request["chunk"]):0;varchunks=context.Request["chunks"]!=null?int.Parse(context.Request["chunks"]):1;varfileId=context.Request["fileId"];varfileName=context.Request["name"]??"unknown";// 处理文件分片HttpPostedFilefile=context.Request.Files[0];stringtempPath=Path.Combine(ServerConfig.TempDir,fileId);// 确保目录存在Directory.CreateDirectory(tempPath);// 写入分片文件stringchunkPath=Path.Combine(tempPath,chunk.ToString());using(varfs=File.OpenWrite(chunkPath)){file.InputStream.CopyTo(fs);}// 如果是最后一个分片则合并if(chunk==chunks-1){MergeFiles(tempPath,fileName,chunks);EncryptAndSaveToOSS(fileName);// 加密后存OSS}context.Response.Write(JsonConvert.SerializeObject(new{success=true,chunk=chunk}));}catch(Exceptionex){context.Response.Write(JsonConvert.SerializeObject(new{error=ex.Message}));}}// 合并分片文件privatevoidMergeFiles(stringtempPath,stringfileName,inttotalChunks){stringdestPath=Path.Combine(ServerConfig.UploadDir,fileName);using(vardestStream=File.Create(destPath)){for(inti=0;i<totalChunks;i++){stringchunkPath=Path.Combine(tempPath,i.ToString());using(varsourceStream=File.OpenRead(chunkPath)){sourceStream.CopyTo(destStream);}File.Delete(chunkPath);}}Directory.Delete(tempPath);}// 更多方法...}

数据库设计:比相亲简历还详细

-- SQL Server 数据库表设计CREATETABLE[dbo].[FileRecords]([Id]UNIQUEIDENTIFIERPRIMARYKEYDEFAULTNEWID(),[FileName]NVARCHAR(255)NOTNULL,[FileSize]BIGINTNOTNULL,[FileHash]VARCHAR(64)NOTNULL,[StoragePath]NVARCHAR(512)NOTNULL,[EncryptKey]VARCHAR(512)NOTNULL,-- 加密密钥[UploadTime]DATETIMEDEFAULTGETDATE(),[UserId]INTNOTNULL,-- 关联用户[FolderId]UNIQUEIDENTIFIERNULL-- 文件夹关联);CREATETABLE[dbo].[UploadProgress]([FileId]UNIQUEIDENTIFIERPRIMARYKEY,[UserId]INTNOTNULL,[TotalChunks]INTNOTNULL,[CompletedChunks]INTNOTNULL,[LastUpdate]DATETIMEDEFAULTGETDATE(),[BrowserInfo]NVARCHAR(MAX)NULL-- 存储浏览器指纹信息);

遇到的坑:比我的发际线还高

  1. IE8兼容地狱

    • Flash需要用户手动点击才能激活
    • 控制台输出要用window.console.log判断存在性
    • AJAX请求要特殊处理
  2. 信创浏览器适配

    • 龙芯浏览器的内核是Mozilla?还是Chromium?不,它是薛定谔的内核!
    • 红莲花浏览器居然不支持ES6的箭头函数
  3. 持久化存储方案

    • IE8只能用userData或Cookie
    • 现代浏览器用IndexedDB
    • 信创浏览器?看心情选择存储方式
  4. 文件夹上传

    • WebUploader的文件夹上传在IE下是废的
    • 要自己用递归处理FileSystem API

求职宣言:全栈苦力在线接单

通过这个项目我掌握了:

  1. 考古学(IE8适配)
  2. 密码学(虽然只是调库)
  3. 心理学(调试时的自我疏导)
  4. 金融学(算红包提成)

求工作推荐!要求:

  • 不用兼容IE6(这是我的底线)
  • 老板不要求"这个需求很简单"
  • 最好能报销生发液

P.S. 那个QQ群红包是真的!我已经靠提成实现奶茶自由了!(虽然还没收到钱)

实用代码片段:文件夹上传处理

// 文件夹上传处理 (现代浏览器)functionhandleFolderUpload(folder){constentries=[];// 递归读取文件夹内容functionreadDirectory(directory,path=''){constreader=directory.createReader();reader.readEntries(entries=>{entries.forEach(entry=>{if(entry.isFile){entry.file(file=>{file.fullPath=path+file.name;// 保留路径信息entries.push(file);});}elseif(entry.isDirectory){readDirectory(entry,path+entry.name+'/');}});});}readDirectory(folder);// 上传所有文件returnPromise.all(entries.map(file=>{returnnewPromise((resolve,reject)=>{constformData=newFormData();formData.append('file',file);formData.append('path',file.fullPath);fetch('/api/upload',{method:'POST',body:formData}).then(resolve).catch(reject);});}));}// IE下的替代方案(使用ActiveX)functionieHandleFolderUpload(){// 这个代码太血腥了,就不展示了alert('请升级浏览器到IE10以上或使用现代浏览器');}

总结:毕业设计改变人生

这个项目教会我:

  1. 永远不要在需求评审时说"这个简单"
  2. 信创浏览器是检验真爱的新标准
  3. 10G文件上传前记得清理C盘
  4. QQ群红包可能是新型庞氏骗局(但我还是想要)

(真诚求工作推荐,会修打印机,能装Windows 7那种)

设置框架

安装.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/1159056.shtml

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

相关文章

中小企业福音,快速部署的PHP进销存系统,一步迈入高效管理

温馨提示&#xff1a;文末有资源获取方式对于众多中小企业而言&#xff0c;引入一套管理系统的最大顾虑往往是&#xff1a;部署是否复杂&#xff1f;员工是否能用得起来&#xff1f;成本是否高昂&#xff1f;现在&#xff0c;所有顾虑都可以放下。我们推出一款真正为中小企业量…

C++构造函数中慎用虚函数

1.C构造函数中慎用虚函数你遇到的这个警告来自 Clang Static Analyzer&#xff08;clang-analyzer&#xff09;&#xff0c;具体是&#xff1a;Call to virtual method ModParam::setJsonData during construction bypasses virtual dispatch [clang-analyzer-optin.cplusplus.…

AI编辑器trae的solo模式是什么?

Trae 的 SOLO 模式是字节跳动 AI 编程 IDE Trae 中以 AI 为主导的全流程自动化开发模式&#xff0c;核心是让 AI 自主完成从需求理解、任务拆解、编码、测试到部署的完整开发链路&#xff0c;开发者仅需以自然语言输入需求并可随时介入调整&#xff0c;无需手动操作全流程Trae。…

如何在.NET WebForm中实现能源化工行业的大文件分片断点续传?

大文件传输系统技术方案 作为江苏某软件公司的技术负责人&#xff0c;在处理公司产品部门提出的大文件传输需求时&#xff0c;我经过详细调研和评估&#xff0c;提出以下技术方案&#xff1a; 需求分析与技术挑战 当前需求面临的主要技术挑战包括&#xff1a; 超大文件传输…

融媒体中心三审三校的必要性,为什么?

“三审三校”制度不仅是传统出版业的优良传统&#xff0c;更是融媒体中心生存与发展的“生命线”和“安全阀”。在“一次采集、多种生成、多元传播”的融媒体环境下&#xff0c;实行严格的“三审三校”具有以下四大核心必要性&#xff1a;一、 守住政治安全的“底线”&#xff…

JDK17 前后写法对比:差点没认出是 Java

Java&#xff0c;一直被开发者戏称为“啰嗦”&#xff0c;但从 JDK 12 到 JDK 17&#xff0c;这门语言发生了显著变化。多个语法层面的增强让 Java 更加简洁、表达力更强&#xff0c;也更接近现代语言的风格。本文将带你梳理这六个版本中 Java 的关键语法演进。&#x1f440;语…

ROS2开发

ROS 2&#xff08;Robot Operating System 2&#xff09;是用于机器人开发的灵活框架&#xff0c;相较于 ROS 1&#xff0c;它在实时性、安全性、跨平台支持和分布式通信等方面有显著提升。以下是一个 ROS 2 开发的快速入门指南&#xff0c;适用于初学者或希望系统化学习的人。…

信创环境下XHEDITOR怎样处理Word公式粘贴兼容性问题?

作为一名山西PHP程序员的外包奇遇记 大家好&#xff01;我是来自山西的一名PHP程序员&#xff0c;最近刚接了个CMS企业官网的外包项目&#xff0c;客户突然甩来个"豪华套餐"需求——要在后台编辑器里加一堆高大上的文档导入功能。 客户需求大揭秘 客户要求&#x…

解读GB/T4857.23-2021 医疗器械运输包装振动测试意义

在医疗器械、生物制药、疫苗等行业&#xff0c;产品运输过程中的安全性与稳定性直接关系到临床使用效果和患者生命安全。GB/T4857.23-2021《包装 运输包装件基本试验 第23部分&#xff1a;垂直随机振动试验方法》作为运输包装振动测试的重要标准&#xff0c;为相关企业提供了科…

教室照明如何影响学生视力健康与学习效率?

伴着教育环境持续改进&#xff0c;教室照明身为学生日常学习里重要的物理条件&#xff0c;其质量径直对学生的视力健康及学习效率产生影响。根据近些年多项调查数据所示&#xff0c;我国青少年近视率始终处于高位&#xff0c;部分年龄段近视占比已逾35%。此种现象除和用眼习惯、…

金融风控平台怎样将Excel公式转存为XHEDITOR可编辑格式?

山西PHP程序员的逆袭之路&#xff1a;用代码搞钱&#xff0c;用QQ群发家&#xff01; 各位老铁们好&#xff01;我是老张&#xff0c;一个在山西太原窝着写PHP的"码农"。最近接了个CMS企业官网的外包项目&#xff0c;客户提出了个"变态"需求&#xff1a;要…

XHEDITOR前端如何兼容Word公式跨浏览器粘贴?

山西PHP程序员的逆袭之路&#xff1a;用代码搞钱&#xff0c;用QQ群发家&#xff01; 各位老铁们好&#xff01;我是老张&#xff0c;一个在山西太原窝着写PHP的"码农"。最近接了个CMS企业官网的外包项目&#xff0c;客户提出了个"变态"需求&#xff1a;要…

军工系统如何通过XHEDITOR实现Word公式安全导入?

山西PHP程序员的Word粘贴大冒险 大家好&#xff0c;我是山西的一个苦逼PHP程序员&#xff0c;最近接了个CMS企业官网的外包项目。客户突然甩给我一个需求&#xff0c;让我在xhEditor编辑器里加个能直接粘贴Word的功能&#xff0c;还要支持各种文档导入和公式转换… 需求分析 …

【VTK手册041】切片抽取工具:vtkCutter原理解析

【VTK手册041】切片抽取工具&#xff1a;vtkCutter原理解析 在医学图像处理与三维可视化领域&#xff0c;切片抽取&#xff08;Slicing&#xff09;是分析解剖结构最常用的手段之一。VTK 提供的 vtkCutter 是实现这一核心功能的基石类。本文将深入解析 vtkCutter 的基本原理、核…

【VTK 手册040】vtkPlane 详解:原理、用法与源码剖析

【VTK 手册040】vtkPlane 详解&#xff1a;原理、用法与源码剖析 1. 概述 在医学图像处理中&#xff0c;平面的定义与计算无处不在。无论是 MPR&#xff08;多平面重建&#xff09;、图像裁剪&#xff08;Clipping&#xff09; 还是 解剖结构对齐&#xff0c;都离不开平面模型。…

手把手拆解旅行搭子Pro:基于Astron的Agent工作流实战

文章目录1. 前言&#xff1a;为什么需要 Agent 工作流&#xff1f;2. 提示词Agent与工作流Agent2.1 提示词驱动的智能体2.2 工作流驱动智能体3. 旅行搭子Agent工作流设计理念3.1 工作流规则3.2 工作流结构设计4. 星辰 Agent 平台工作流实战&#xff08;旅行搭子&#xff09;4.1…

亲测好用!10款AI论文平台测评:研究生开题报告神器

亲测好用&#xff01;10款AI论文平台测评&#xff1a;研究生开题报告神器 2026年AI论文平台测评&#xff1a;为何值得一看 在当前学术研究日益数字化的背景下&#xff0c;AI论文平台已成为研究生群体不可或缺的辅助工具。然而&#xff0c;面对市场上众多功能相似的产品&#xf…

导师严选9个AI论文软件,助你轻松搞定本科生毕业论文!

导师严选9个AI论文软件&#xff0c;助你轻松搞定本科生毕业论文&#xff01; AI 工具助力论文写作&#xff0c;轻松应对学术挑战 在当前的学术环境中&#xff0c;越来越多的本科生开始借助 AI 工具来提升论文写作的效率与质量。尤其是面对 AIGC 率控制、语义通顺等关键问题时&a…

国联股份董事、高级副总裁王挺一行赴宣城国控集团参观考察并签署战略合作协议

2026年1月7日—8日&#xff0c;国联股份董事、高级副总裁王挺&#xff0c;国联股份副总裁、卫多多/纸多多CEO黄莎莎&#xff0c;国联股份产业发展部副总裁许德荣、坚持企业家俱乐部合伙人张军等一行赴宣城国控集团参观考察&#xff0c;同宣城市委常委、常务副市长蔡毅&#xff…

c++泛型编程之Typelists

Typelists是一个用来操作一大群型别的C工具。就像lists对数值提供各种基本操作一样&#xff0c;typelists对型别也提供相同的操作。 比如有时候必须对某些型别重复撰写相同的代码&#xff0c;但是template又帮不上忙。假设需要实作一个Abstract Factory&#xff0c;像如下这样&…