1. 项目背景与需求解析
作为一名长期奋战在企业级应用开发一线的.NET工程师,最近接手了一个颇具挑战性的文件管理系统开发需求。客户是一家大型制造企业的IT部门,他们现有的文档管理系统已经服役超过10年,面临着诸多痛点:
- 文件上传限制在2GB以内,无法满足设计部门大型3D模型文件(单个文件常达10-20GB)的传输需求
- 文件夹上传后层级结构丢失,导致技术文档、项目资料的管理混乱
- 公司部分老旧电脑仍在使用Windows 7+IE8环境,系统必须兼容这些"古董级"配置
- 敏感技术文档需要加密传输和存储,同时要求支持断点续传功能
经过深入沟通,我们最终确定了以下核心需求规格:
1.1 核心功能指标
-
大文件处理能力:
- 支持单个文件最大20GB的上传下载
- 文件夹上传保留完整目录结构(如
/研发中心/2024新项目/3D模型/发动机总成.stp) - 支持同时上传1000+个文件的任务队列
-
兼容性要求:
- 在IE8浏览器上通过Flash实现基础功能
- 现代浏览器使用HTML5 API获得更好体验
- 支持Windows 7及以上操作系统
-
安全与可靠性:
- 传输过程使用AES-256加密
- 支持服务端存储加密(可选SM4国密算法)
- 断点续传功能需在浏览器关闭/系统重启后仍能恢复
-
性能优化:
- 分片大小智能调整(2MB-10MB可配置)
- 并行上传分片(现代浏览器支持6个并发)
- 流式下载避免内存溢出
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 前端技术栈
经过多轮技术验证,最终选定以下方案:
核心组件:
- WebUploader:百度开源的上传组件,支持Flash和HTML5双模式
- Flash模式用于IE8兼容
- HTML5模式提供更好的现代浏览器体验
- 内置分片上传、MD5校验、进度显示等核心功能
辅助库:
- SparkMD5:计算文件指纹用于断点续传标识
- CryptoJS:前端加密实现(AES/SM4)
- Vue3:构建管理界面(兼容性构建版本)
javascript复制// 前端加密配置示例
const encryptFile = (fileChunk, key) => {
const wordArray = CryptoJS.lib.WordArray.create(fileChunk);
const encrypted = CryptoJS.AES.encrypt(wordArray, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
};
2.2 后端技术栈
考虑到客户现有系统基于.NET Framework,我们选择:
核心框架:
- ASP.NET WebForm:与客户现有系统架构一致
- .NET Framework 4.7.2:平衡新特性和兼容性
关键技术点:
- 分片接收与合并
- 加密/解密服务
- 文件流式处理
- 数据库记录管理
csharp复制// 分片合并逻辑示例
public void MergeChunks(string fileMd5, string fileName)
{
var chunkDir = Path.Combine(ChunkTempPath, fileMd5);
var finalPath = Path.Combine(UploadRootPath, fileName);
// 确保目录存在
Directory.CreateDirectory(Path.GetDirectoryName(finalPath));
// 按序号合并分片
using (var fs = new FileStream(finalPath, FileMode.Create))
{
foreach (var chunk in GetSortedChunks(chunkDir))
{
