news 2026/4/23 18:00:27

C#如何实现大文件上传的日志记录?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#如何实现大文件上传的日志记录?

大文件传输系统建设方案(ASP.NET技术栈)

一、项目背景与核心需求

作为公司项目负责人,针对产品部门提出的100G级大文件传输需求,需构建一套高兼容性、高稳定性、全浏览器支持的解决方案。核心需求如下:

  1. 功能需求

    • 单文件100G+传输,支持文件夹层级结构保留
    • 断点续传(浏览器刷新/关闭后进度不丢失)
    • 非打包下载(支持10万+文件并发下载)
    • 加密传输(SM4/AES可配置)与自动解密下载
  2. 技术栈兼容性

    • 后端:ASP.NET WebForm(现有系统) + .NET Core(新项目)
    • 前端:Vue2/Vue3/React(微前端集成)
    • 数据库:SQL Server(主)+ MySQL/Oracle(可配置)
    • 部署:阿里云ECS(内网/公网双模式)
  3. 商务约束

    • 年授权预算≤20万(不限项目数量)
    • 供应商需提供5个国企合作证明材料
二、技术架构设计
1.分层架构
┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ 浏览器端 │ │ 应用服务器 │ │ 存储层 │ │ (IE8/Vue2) │←──→│ (ASP.NET/.NET)│←──→│ (阿里云OSS) │ └───────────────┘ └───────────────┘ └───────────────┘ ↑ ↑ ↑ │ 分片传输组件 │ 加密控制模块 │ 对象存储适配器 │ │ 进度持久化 │ 算法切换服务 │ 多云存储路由 │ │ 文件夹解析器 │ 流量控制中间件 │ │
2.关键技术选型
  • 分片传输
    • 现代浏览器:Web Workers + Fetch API
    • IE8:XMLHttpRequest + Flash插件(通过Flex SDK编译)
  • 进度持久化
    • 现代浏览器:localStorage + IndexedDB
    • IE8:UserData对象(通过ActiveXObject)
  • 加密方案
    • 传输层:TLS 1.2 + SM4-CBC(国密SSL证书)
    • 存储层:AES-256-GCM(.NET System.Security.Cryptography)
三、核心功能实现
1.文件夹层级传输(非打包方案)

前端实现(Vue2兼容方案)

// 文件夹解析器(兼容IE8)classFolderParser{constructor(fileInputId){this.fileInput=document.getElementById(fileInputId);this.fileTree=[];}asyncparse(){if(window.File&&window.FileReader&&window.FileList&&window.Blob){// 现代浏览器APIconstfiles=this.fileInput.files;this.fileTree=this.buildModernTree(files);}else{// IE8兼容方案(通过Flash上传组件)this.fileTree=awaitthis.parseWithFlash();}returnthis.fileTree;}buildModernTree(files,path=''){consttree=[];for(leti=0;i<files.length;i++){constfile=files[i];constfullPath=path?`${path}/${file.webkitRelativePath}`:file.name;if(file.webkitRelativePath){// 处理文件夹结构constparts=file.webkitRelativePath.split('/');letcurrentLevel=tree;for(letj=0;j<parts.length-1;j++){constdirName=parts[j];letexistingDir=currentLevel.find(item=>item.type==='directory'&&item.name===dirName);if(!existingDir){existingDir={type:'directory',name:dirName,children:[]};currentLevel.push(existingDir);}currentLevel=existingDir.children;}currentLevel.push({type:'file',name:parts[parts.length-1],size:file.size,relativePath:file.webkitRelativePath});}else{tree.push({type:'file',name:file.name,size:file.size});}}returntree;}}

ASP.NET WebForm后端处理

// 文件分片接收接口(.NET Framework 4.8)[WebMethod]publicstaticstringUploadChunk(stringfileId,intchunkIndex,stringchunkData){stringtempPath=HttpContext.Current.Server.MapPath($"~/TempUploads/{fileId}");if(!Directory.Exists(tempPath)){Directory.CreateDirectory(tempPath);}// 解码Base64分片数据byte[]chunkBytes=Convert.FromBase64String(chunkData);// 保存分片到临时文件stringchunkPath=$"{tempPath}/chunk_{chunkIndex}.dat";File.WriteAllBytes(chunkPath,chunkBytes);// 更新Redis进度记录(使用StackExchange.Redis)IDatabaseredis=ConnectionMultiplexer.Connect("localhost").GetDatabase();redis.SetAdd($"upload:{fileId}",chunkIndex.ToString());returnJsonConvert.SerializeObject(new{status="success",receivedChunks=redis.SetLength($"upload:{fileId}")});}
2.断点续传持久化

IE8兼容方案

// ASP.NET处理IE8进度持久化[WebMethod]publicstaticstringSaveProgressIE8(stringfileId,stringprogressData){try{// 使用ASP.NET Session存储(需在web.config中配置sessionState模式为InProc)HttpContext.Current.Session[$"progress_{fileId}"]=progressData;// 降级方案:写入数据库(SQL Server)using(SqlConnectionconn=newSqlConnection(ConfigurationManager.ConnectionStrings["Default"].ConnectionString)){conn.Open();SqlCommandcmd=newSqlCommand("INSERT INTO UploadProgress (FileId, ProgressData, LastUpdate) "+"VALUES (@fileId, @progressData, GETDATE()) "+"ON DUPLICATE KEY UPDATE ProgressData=@progressData, LastUpdate=GETDATE()",conn);cmd.Parameters.AddWithValue("@fileId",fileId);cmd.Parameters.AddWithValue("@progressData",progressData);cmd.ExecuteNonQuery();}return"success";}catch(Exceptionex){return$"error:{ex.Message}";}}
3.加密传输与存储

.NET Core加密服务实现

// SM4加密服务(需引入BouncyCastle)publicclassSm4EncryptionService{privatereadonlybyte[]_key;publicSm4EncryptionService(byte[]key){_key=key??thrownewArgumentNullException(nameof(key));}publicbyte[]Encrypt(byte[]plaintext){varengine=newSM4Engine();varblockCipher=newCbcBlockCipher(engine);varparameters=newParametersWithIV(newKeyParameter(_key),newbyte[16]);// IVblockCipher.Init(true,parameters);byte[]output=newbyte[blockCipher.GetOutputSize(plaintext.Length)];intlength=blockCipher.ProcessBytes(plaintext,0,plaintext.Length,output,0);length+=blockCipher.DoFinal(output,length);Array.Resize(refoutput,length);returnoutput;}// 阿里云OSS上传前加密publicasyncTaskUploadToOssAsync(stringbucketName,stringobjectKey,FileStreamfileStream){varossClient=newOssClient("endpoint","accessKeyId","accessKeySecret");using(varmemoryStream=newMemoryStream()){awaitfileStream.CopyToAsync(memoryStream);byte[]encrypted=Encrypt(memoryStream.ToArray());varrequest=newPutObjectRequest(bucketName,objectKey,newMemoryStream(encrypted)){Metadata=newObjectMetadata{UserMetadata=newDictionary{["x-oss-meta-algorithm"]="SM4",["x-oss-meta-original-size"]=fileStream.Length.ToString()}}};ossClient.PutObject(request);}}}
四、兼容性保障方案
1.浏览器兼容矩阵
浏览器核心方案回退方案
IE8Flash+ActiveX控件纯HTTP分块上传
Chrome/FirefoxWeb Workers多线程Fetch API
360浏览器兼容模式检测强制使用Chrome内核
EdgeFetch API + Streams APIPolyfill
2.操作系统适配
  • Windows 7
    • 禁用TLS 1.3,强制使用TLS 1.2
    • 安装.NET Framework 4.8(通过Web安装程序)
  • Linux
    • 提供Mono运行时支持(针对ASP.NET WebForm)
    • 预装libgcrypt(SM4算法依赖)
五、供应商评估标准
  1. 资质要求

    • 提供5个国企项目合同(需包含金融/政府客户)
    • 阿里云技术认证合作伙伴资质
    • SM4算法商用密码产品认证
  2. 交付物清单

    • 完整C#源代码(含ASP.NET WebForm控件库)
    • IE8兼容性测试报告
    • 100G文件传输压力测试数据
六、项目实施计划
  1. POC验证阶段(2周)

    • 在阿里云ECS搭建测试环境
    • 完成IE8/CentOS/SQL Server兼容性验证
  2. 核心功能开发(4周)

    • 实现分片上传/下载基础框架
    • 完成SM4加密传输模块
  3. 兼容性适配阶段(3周)

    • 适配360浏览器/统信UOS
    • 通过等保2.0二级安全测评
七、风险控制
  1. IE8兼容风险

    • 预留10%预算用于采购第三方兼容性组件(如Telerik UI)
  2. 性能瓶颈风险

    • 在阿里云部署SLB负载均衡
    • 采用OSS多副本存储策略提升下载速度
八、商务谈判要点
  1. 授权模式

    • 要求按年授权(≤20万/年)
    • 明确授权范围(公司内部所有项目无限使用)
  2. 技术保障

    • 要求提供7×24小时技术支持
    • 约定SLA(故障响应时间≤2小时)

本方案通过模块化设计,可快速集成到公司20+现有项目中,预计降低60%以上重复开发成本。建议优先选择具有金融项目实施经验的供应商(如中科软、南天信息等),确保系统稳定性达到99.95%可用性要求。

设置框架

安装.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

创建数据库

配置数据库连接信息

检查数据库配置

访问页面进行测试


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

效果预览

文件上传

文件刷新续传

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

文件夹上传

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

下载完整示例

下载完整示例

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

基于Spring Boot+Vue的大型超市前后台系统

目录 项目介绍 演示视频 系统展示 代码实现 推荐项目 项目开发总结 为什么选择我 源码获取 博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领…

作者头像 李华
网站建设 2026/4/23 10:15:16

RN 图像处理(裁剪、压缩、滤镜)性能很差怎么办?

[toc] 在 React Native 项目里&#xff0c;只要碰到“图片处理”四个字&#xff0c;十有八九跑不掉一句话&#xff1a;卡。尤其是裁剪、压缩、批量处理大图的时候&#xff0c;JS 线程基本“当场升天”&#xff0c;UI 直接卡住不动。 为什么 React Native 在图片处理上这么吃力&…

作者头像 李华
网站建设 2026/4/23 14:27:51

锐角三角函数学习笔记(1)

一、定义 sin&#xff08;正弦&#xff09;对边/斜边 cos&#xff08;余弦&#xff09;邻边/斜边 tan&#xff08;正切&#xff09;对边/邻边 cot&#xff08;余切&#xff09;邻边/对边 变形&#xff1a; 对边sin斜边 邻边cos斜边 对边tan邻边二、特殊角的三角函数 ①30 sin30…

作者头像 李华
网站建设 2026/4/23 12:53:03

YOLOv11涨点改进 | 全网独家创新、Neck特征融合改进篇 | TGRS 2025 | 引入STFFM 时空特征融合模块创新点,通过注意力引导融合,背景噪声抑制,促进小目标特征增强,助力有效涨点

一、本文介绍 🔥本文给大家介绍使用STFFM(时空特征融合模块) 改进YOLOv11网络模型,可在特征提取阶段实现空间外观信息与时间序列信息的早期融合,使模型由单纯的空间建模扩展为时空联合建模。STFFM 通过注意力机制引导网络在关键空间位置和有效特征通道上自适应地融合空间…

作者头像 李华
网站建设 2026/4/23 12:58:18

车联网隐私保护认证区块链实验复现方案

车联网隐私保护认证区块链实验复现方案 一、项目概述与目标 1.1 研究背景 车联网(IoV)作为智能交通系统的核心组成部分,面临着严峻的隐私保护和认证安全挑战。传统的中心化认证机制存在单点故障、隐私泄露等问题。区块链技术以其去中心化、不可篡改的特性,为车联网提供了…

作者头像 李华
网站建设 2026/4/23 12:56:54

19、将 Snort 规则转换为 iptables 规则

将 Snort 规则转换为 iptables 规则 在网络安全领域,我们常常需要使用入侵检测和预防系统来保障网络的安全。Snort 是一款知名的入侵检测系统(IDS),而 iptables 则是 Linux 系统中常用的防火墙工具。将 Snort 规则转换为 iptables 规则,能够结合两者的优势,增强网络的安全…

作者头像 李华