2026/1/11 5:06:39
网站建设
项目流程
广告公司手机网站建设,四平网站建设404页面对网站的好处及设置方法,jquery 网站框架,中国全面开放入境2023年11月2日 星期四 阴有小雨 外包项目日志 - 企业级大文件传输系统Day3 项目背景与架构设计
客户是某地质勘探研究院#xff0c;每日需上传**20GB**的勘探数据#xff08;含激光扫描点云、地质剖面图等#xff09;#xff0c;要求#xff1a;
文件夹结构保留#xf…2023年11月2日 星期四 阴有小雨外包项目日志 - 企业级大文件传输系统Day3项目背景与架构设计客户是某地质勘探研究院每日需上传**20GB**的勘探数据含激光扫描点云、地质剖面图等要求文件夹结构保留1000分类/日需完整维护项目编号/日期/设备类型/的层级军工级加密传输层SM4国产商用密码存储层AES-256双重加密极端断点续传浏览器崩溃/系统重启后能从最后一个分片恢复技术栈升级前端Vue3 WebUploader强制分片IndexedDBService Worker后端ASP.NET WebForm OSS分片直传数据库SQL Server文件元数据树形存储CTE递归查询优化核心代码实现1. 前端文件夹结构解析与分片调度// 使用FileSystem API递归读取文件夹H5方案asyncfunctionscanDirectory(dirHandle){constfileTree{};forawait(const[name,handle]ofdirHandle.entries()){if(handle.kindfile){fileTree[name]awaithandle.getFile();}elseif(handle.kinddirectory){fileTree[name]awaitscanDirectory(handle);// 递归构建树}}returnfileTree;}// IE8降级方案通过ActiveX获取文件夹路径functionscanFolderIE8(path){constfsonewActiveXObject(Scripting.FileSystemObject);constfolderfso.GetFolder(path);constfilesnewEnumerator(folder.files);// 注需客户系统启用ActiveX}2. 后端分片合并与OSS直传C#// UploadHandler.ashxpublicvoidProcessRequest(HttpContextcontext){stringfileIdcontext.Request[fileId];intchunkIndexint.Parse(context.Request[chunkIndex]);// 加密分片SM4CBC模式byte[]encryptedChunk;using(SM4sm4newSM4()){encryptedChunksm4.EncryptCBC(File.ReadAllBytes(context.Request.Files[0].InputStream),ConfigurationManager.AppSettings[SM4_Key],ConfigurationManager.AppSettings[SM4_IV]);}// 临时分片存储stringchunkPath${OSS_TEMP_PATH}/{fileId}_{chunkIndex}.part;File.WriteAllBytes(chunkPath,encryptedChunk);// 响应分片上传结果context.Response.Write(JsonConvert.SerializeObject(new{statussuccess,nextChunkchunkIndex1}));}3. 断点续传持久化方案// Service Worker离线缓存控制self.addEventListener(fetch,event{if(event.request.url.includes(/api/upload_chunk)){event.respondWith(caches.open(upload-cache).then(cache{returnfetch(event.request).then(responsecache.put(event.request,response.clone())).catch(()cache.match(event.request));// 失败时使用缓存}));}});今日技术突破国产浏览器适配红莲花浏览器需关闭SameSite限制添加头Set-Cookie: Secure; SameSiteNone龙芯浏览器要求分片大小必须为2MB整数倍超大规模文件夹优化采用虚拟滚动渲染文件树实测支持10万文件展示数据库使用HierarchyId类型存储路径结构加密性能问题在Web Worker中运行SM4算法避免UI线程阻塞遇到的深坑IE8的内存泄漏WebUploader的Flash组件连续上传5次后会崩溃临时方案每上传完成3个文件后强制刷新Flash容器OSS分片合并超时20GB文件合并时HTTP请求超时最终方案改用OSS OpenAPI的CompleteMultipartUpload明日计划编写完整开发文档含国产化适配章节压力测试模拟100并发文件夹上传联系客户确认信创环境具体参数附项目结构示意图FileSystemCore ├───Client │ ├── WebUploader // 兼容层 │ └── FileTree.vue // 虚拟滚动组件 ├───Server │ ├── FileService.asmx // 主逻辑 │ └── SM4Helper.cs // 国密算法封装 └───Docs ├── 信创环境部署指南.md └── 二次开发API文档.md日记风格建议突出技术难点解决过程客户特殊需求应对策略如果需要完整的ASP.NET分片合并方案或SM4算法封装库可以进一步交流已申请加入QQ群374992201。设置框架安装.NET Framework 4.7.2https://dotnet.microsoft.com/en-us/download/dotnet-framework/net472框架选择4.7.2添加3rd引用编译项目NOSQLNOSQL无需任何配置可直接访问页面进行测试SQL使用IIS大文件上传测试推荐使用IIS以获取更高性能。使用IIS Express小文件上传测试可以使用IIS Express创建数据库配置数据库连接信息检查数据库配置访问页面进行测试相关参考文件保存位置效果预览文件上传文件刷新续传支持离线保存文件进度在关闭浏览器刷新浏览器后进行不丢失仍然能够继续上传文件夹上传支持上传文件夹并保留层级结构同样支持进度信息离线保存刷新页面关闭页面重启系统不丢失上传进度。批量下载支持文件批量下载下载续传文件下载支持离线保存进度信息刷新页面关闭页面重启系统均不会丢失进度信息。文件夹下载支持下载文件夹并保留层级结构不打包不占用服务器资源。下载完整示例下载完整示例