news 2026/4/16 10:40:43

C#如何结合国密算法实现大文件加密存储?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#如何结合国密算法实现大文件加密存储?

大文件上传系统开发全攻略(兼容IE8的Vue3+WebForm实现)

项目背景

兄弟们,这次接了个硬骨头活儿!客户要我们实现一个支持20G文件上传的系统,还要兼容IE8这种古董浏览器,预算只有100块!不过别慌,咱们程序员不就是喜欢挑战不可能吗?今天就带大家一步步搞定这个项目。

技术选型分析

首先梳理下需求:

  1. 前端:Vue3 CLI + 原生JS(因为要兼容IE8)
  2. 后端:ASP.NET WebForm(SQL Server)
  3. 功能:大文件/文件夹上传下载、加密传输、断点续传
  4. 特殊要求:兼容IE8、保留文件夹结构、非打包下载

为什么不用WebUploader?
虽然它是个好库,但IE8兼容性成问题,而且我们要完全控制代码,所以决定原生JS实现。

前端实现(兼容IE8版)

1. 文件选择组件(兼容IE8)

export default { data() { return { fileList: [], chunkSize: 5 * 1024 * 1024, // 5MB分片 isIE8: false } }, mounted() { // 检测IE8 this.isIE8 = this.detectIE8(); // 恢复上传进度 this.restoreUploadProgress(); }, methods: { detectIE8() { const ua = window.navigator.userAgent; return ua.indexOf('MSIE 8.0') > 0 || ua.indexOf('MSIE 7.0') > 0; }, triggerFileInput() { document.getElementById('fileInput').click(); }, triggerFolderInput() { if (this.isIE8) { alert('IE8不支持文件夹上传,请使用现代浏览器或单独上传文件'); return; } document.getElementById('folderInput').click(); }, } }

2. IE8兼容性处理

由于IE8不支持FormData、Blob等现代API,我们需要做兼容处理:

// 在main.js或单独的文件中添加IE8兼容代码if(detectIE8()){// 加载必要的polyfillloadScript('https://cdn.jsdelivr.net/npm/ie8-polyfill@1.0.0/dist/ie8-polyfill.min.js');// 重写XMLHttpRequest以支持大文件上传constoriginalXHR=window.XMLHttpRequest;window.XMLHttpRequest=function(){constxhr=neworiginalXHR();constoriginalSend=xhr.send;xhr.send=function(data){if(datainstanceofFormData){// IE8 FormData处理constform=document.createElement('form');form.style.display='none';document.body.appendChild(form);// 正常发送originalSend.call(xhr,data);};returnxhr;};}

后端实现(ASP.NET WebForm)

1. 文件上传处理(C#)

// FileHandler.ashx.cspublicclassFileHandler:IHttpHandler{privatereadonlystringstoragePath=@"E:\UploadedFiles";privatereadonlystringconnectionString="Your_SQL_Server_Connection_String";publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType="application/json";try{stringaction=context.Request["action"]??context.Request.PathInfo.Trim('/');switch(action.ToLower()){case"getsign":HandleGetSign(context);break;case"uploadchunk":HandleUploadChunk(context);break;case"merge":HandleMerge(context);break;case"download":HandleDownload(context);break;default:context.Response.Write("{\"success\":false,\"message\":\"Invalid action\"}");break;}}catch(Exceptionex){}}}

2. 数据库表设计(SQL Server)

-- 上传主表CREATETABLEUploads(IdINTIDENTITY(1,1)PRIMARYKEY,UploadId NVARCHAR(50)NOTNULLUNIQUE,FileName NVARCHAR(255)NOTNULL,FullPath NVARCHAR(1000)NOTNULL,FileSizeBIGINTNOTNULL,ChunksINTNOTNULL,StatusNVARCHAR(20)NOTNULLDEFAULT'uploading',CreatedDateDATETIMENOTNULL,CompletedDateDATETIMENULL,UserId NVARCHAR(50)NULL-- 如果有用户系统);-- 上传分片表CREATETABLEUploadChunks(IdINTIDENTITY(1,1)PRIMARYKEY,UploadId NVARCHAR(50)NOTNULL,ChunkIndexINTNOTNULL,StatusNVARCHAR(20)NOTNULLDEFAULT'pending',CreatedDateDATETIMENOTNULL,UpdateDateDATETIMENOTNULL,FOREIGNKEY(UploadId)REFERENCESUploads(UploadId));-- 文件元数据表CREATETABLEFiles(IdINTIDENTITY(1,1)PRIMARYKEY,FilePath NVARCHAR(1000)NOTNULLUNIQUE,FileName NVARCHAR(255)NOTNULL,FileSizeBIGINTNOTNULL,UploadDateDATETIMENOTNULLDEFAULTGETDATE(),LastModifiedDATETIMENOTNULLDEFAULTGETDATE(),IsDirectoryBITNOTNULLDEFAULT0,ParentPath NVARCHAR(1000)NULL,UserId NVARCHAR(50)NULL);

加密传输和存储实现

1. 前端加密(使用AES简化版)

// crypto.js - 简化版AES加密(实际项目应该使用更完整的库)functionencryptData(data,password){// 实际项目中应该使用Web Crypto API或引入crypto-js等库// 这里只是示例,实际IE8兼容的加密需要更复杂的实现// 简单示例:使用XOR"加密"(实际项目中不要这样用!)if(typeofdata==='string'){letresult='';for(leti=0;i<data.length;i++){result+=String.fromCharCode(data.charCodeAt(i)^password.charCodeAt(i%password.length));}returnresult;}returndata;}

2. 后端解密和存储加密

// 在FileHandler.ashx.cs中添加privatebyte[]DecryptData(byte[]data,stringpassword){// 实际项目应该使用AES等强加密算法// 这里只是示例,与前端的XOR"加密"对应byte[]result=newbyte[data.Length];for(inti=0;i<data.Length;i++){result[i]=(byte)(data[i]^password[i%password.Length]);}returnresult;}

部署和配置

1. IIS配置要点

  1. 上传大小限制:在web.config中添加:
  1. 超时设置:在IIS管理器中:
    • 应用程序池 -> 高级设置 -> 闲置超时(分钟) 设为 0(不超时)
    • 连接超时设为较大值

2. 前端构建配置

vue.config.js中:

module.exports={publicPath:'./',// 相对路径outputDir:'dist',assetsDir:'static',configureWebpack:{target:['web','es5'],// 兼容IE8module:{rules:[{test:/\.js$/,exclude:/node_modules\/(?!(dom7|ssr-window|swiper)\/).*/,use:{loader:'babel-loader',options:{presets:[['@babel/preset-env',{useBuiltIns:'usage',corejs:3,targets:{ie:'8'}}]]}}}]}},chainWebpack:config=>{// 兼容IE8的polyfillconfig.entry('main').add('babel-polyfill')}}

完整系统架构图

客户端 (IE8/现代浏览器) ├─ Vue3前端 (兼容IE8) │ ├─ 文件选择组件 │ ├─ 分片上传逻辑 │ ├─ 进度保存与恢复 │ └─ 加密处理 │ └─ 原生JS后备方案 ├─ IE8兼容的表单提交 ├─ iframe上传处理 └─ 进度轮询机制 服务器 (IIS) ├─ ASP.NET WebForm后端 │ ├─ 文件分片接收 │ ├─ 数据库记录 │ └─ 合并处理 │ └─ 文件存储系统 ├─ 临时分片存储 (E:\temp) └─ 正式文件存储 (E:\UploadedFiles) 数据库 (SQL Server) ├─ Uploads表 (上传记录) ├─ UploadChunks表 (分片记录) └─ Files表 (文件元数据)

开发文档要点

  1. 系统功能

    • 大文件分片上传(5MB/片)
    • 文件夹结构保留
    • 断点续传
    • 加密传输和存储
    • 多浏览器兼容
  2. API接口

    • /api/file/getSign- 获取上传签名
    • /api/file/uploadChunk- 上传分片
    • /api/file/merge- 合并文件
    • /api/file/download- 下载文件
  3. 部署说明

    • IIS配置要求
    • 数据库初始化脚本
    • 存储路径权限设置
  4. 兼容性说明

    • IE8特殊处理
    • 现代浏览器优化
    • 降级方案

实际项目建议

兄弟们,虽然我们接了这个活,但说实话100块预算真的不够看。这里有几个建议:

  1. 分阶段交付:先实现基本文件上传功能,再逐步添加高级功能
  2. 简化加密:初期可以用ZIP压缩代替加密,降低开发难度
  3. 性能优化:20GB文件上传需要服务器有足够资源,建议客户升级硬件
  4. 额外收费:把兼容IE8作为额外服务收费,不然真要亏本

完整代码获取

由于篇幅限制,完整代码(包括前端构建、后端实现、数据库脚本等)已经放在GitHub上了:
https://github.com/your-repo/large-file-uploader

加入我们的接单群

最后打个广告,欢迎加入我们的接单群(374992201):

  • 免费获取完整项目代码
  • 7*24小时技术支持
  • 接单合作机会
  • 红包活动进行中
  • 高额提成计划(推荐就有20%起)

群里大佬云集,无论是找工作、接私单还是技术交流,都是不二之选!特别是最近有红包活动,加群就送1-99元,快来抢啊!

总结

这次的项目虽然挑战很大,但通过合理的分片上传、状态保存和兼容性处理,我们完全可以在预算内完成。关键是要:

  1. 前端做好分片和进度保存
  2. 后端稳定接收分片并记录状态
  3. 特别注意IE8的兼容性问题
  4. 加密部分可以简化或作为增值服务

希望这个方案对大家有所帮助,也欢迎在群里一起讨论更优的解决方案!

设置框架

安装.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/1 22:14:40

java计算机毕业设计沙县小吃收银系统设计与实现 基于SpringBoot的轻量级快餐店点餐收银一体化平台 JavaWeb小吃门店智能结算与订单管理系统

计算机毕业设计沙县小吃收银系统设计与实现6x7j89&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 高峰时段手写单、算价慢、错账多&#xff0c;沙县小吃也急需“扫码即走”的速度…

作者头像 李华
网站建设 2026/4/13 10:44:26

jQuery如何优化大附件分块上传的性能?

大文件传输系统技术方案 一、项目背景与需求痛点 公司现有产品需支持100G级大文件传输&#xff08;上传/下载&#xff09;&#xff0c;涵盖单文件、文件夹&#xff08;保留层级结构&#xff09;&#xff0c;并满足高稳定性、加密传输/存储、跨平台兼容&#xff08;含IE8&…

作者头像 李华
网站建设 2026/4/5 4:06:17

定义GEO新标准:看深圳犀牛云如何助力企业赢取全球AI搜索先机

企业介绍&#xff1a; 犀牛云GEO是深圳紫虎软件有限公司旗下品牌。作为国家高新技术企业和深圳市宝安区创新企业50强&#xff0c;品牌聚焦于GEO&#xff08;AI搜索优化&#xff09;领域&#xff0c;已累计服务超过200家全球企业&#xff0c;其中包括华为、顺丰等众多上市公司。…

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

HeidiSql 数据库可视化工具 v12.14,支持访问 MySQL、MariaDB 和 SQL Server

免费开源的轻量级数据库客户端软件&#xff0c;拥有图形化界面&#xff0c;支持访问 MySQL、MariaDB 和 SQL Server。允许浏览数据库&#xff0c;管理表&#xff0c;浏览和编辑记录&#xff0c;管理用户权限等等。 HeidiSQL官方版是一款开源的数据库管理软件。 HeidiSQL官方版…

作者头像 李华
网站建设 2026/4/4 15:18:17

n型TOPCon电池中通过氘化/氢化混合策略提升钝化性能

在晶体硅太阳能电池领域&#xff0c;隧穿氧化层钝化接触&#xff08;TOPCon&#xff09;技术是突破效率瓶颈的关键方向&#xff0c;其钝化性能直接决定电池效率。目前&#xff0c;TOPCon结构的制备严重依赖氢化工艺来中和缺陷&#xff0c;但传统方法面临钝化效果提升有限、工艺…

作者头像 李华