news 2026/1/3 11:31:55

.NET WebForm如何设计大文件上传的暂停与继续功能?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
.NET WebForm如何设计大文件上传的暂停与继续功能?

政府招投标项目大文件传输系统解决方案探索

作为北京航空航天领域一家专注于政府及军工项目的公司,在近期推进的政府招投标项目流程中,遭遇了大文件传输这一关键需求挑战。该项目要求支持高达 50G 左右文件的传输,涵盖文件与文件夹的上传和下载功能,且文件夹传输需完整保留层级结构。鉴于项目面向政府单位,信息安全至关重要,系统必须适配信创国产化环境,包括操作系统(统信 UOS、中标麒麟、银河麒麟)、浏览器(主流浏览器及龙芯浏览器、红莲花浏览器、奇安信安全浏览器)以及数据库(SQL Server、MySQL、Oracle 和国产化产品达梦、人大金仓)。后端采用 SpringBoot,前端基于 vue2 - cli 框架。

现有开源组件调研困境

在前期调研阶段,我们对市场上主流开源大文件上传组件进行了全面评估。以百度开源的 WebUploader 为例,该组件虽曾有一定影响力,但目前已停止更新,缺乏技术支持。在政府和军工项目中,系统稳定性和及时的技术支持是项目成功的关键因素,使用无技术支持的开源组件存在极大风险,一旦出现问题可能导致项目进度严重受阻,甚至影响项目交付质量,因此公司不敢轻易采用。其他开源组件也普遍存在类似问题,没有可靠的技术支持渠道,遇到问题无法及时联系作者解决,这使得我们不得不重新寻找更合适的解决方案。

采购源代码自研方案考量

考虑到公司客户主要为政府和军工单位,对产品源代码有明确需求,且公司项目数量众多,每年约 2000 + 个。若采用单套授权方式,不仅成本高昂,而且管理起来极为繁琐。因此,领导层决定采购产品源代码,由公司研发部门负责后续开发与维护,同时满足产品部门的自研需求。这种方式既能保证公司对产品的完全掌控,又能根据项目实际需求进行灵活定制和优化,提高系统的适配性和安全性。

技术选型与架构设计

前端技术选型

前端基于 vue2 - cli 框架,为实现对多种浏览器的兼容,包括信创国产浏览器,我们将采用以下策略:

  • 使用 Babel 进行 JavaScript 代码转译,确保代码在不同浏览器中的兼容性。
  • 引入 polyfill 库,填补浏览器对现代 JavaScript 特性的支持差异。
  • 针对不同浏览器进行特性检测和适配,确保界面显示和功能操作的一致性。

后端技术选型

后端采用 SpringBoot 框架,利用其快速开发、自动配置和丰富的插件生态优势,提高开发效率。为满足信创国产化环境要求,在数据库访问层,我们将针对不同数据库进行适配开发,确保系统能够无缝切换使用 SQL Server、MySQL、Oracle、达梦和人大金仓等数据库。

大文件传输技术实现

分片上传与下载

为解决大文件传输问题,我们将采用分片上传和下载技术。将大文件分割成多个小块,分别进行上传和下载,最后在服务端或客户端进行合并。这种方式可以有效避免因网络不稳定导致的大文件传输失败问题,提高传输的可靠性和效率。

以下是前端使用 vue2 - cli 实现文件分片上传的示例代码:

export default { data() { return { file: null, chunkSize: 5 * 1024 * 1024 // 每片 5MB }; }, methods: { handleFileChange(event) { this.file = event.target.files[0]; }, async uploadFile() { if (!this.file) return; const totalChunks = Math.ceil(this.file.size / this.chunkSize); const fileId = this.generateFileId(); // 生成唯一文件 ID for (let i = 0; i < totalChunks; i++) { const start = i * this.chunkSize; const end = Math.min(start + this.chunkSize, this.file.size); const chunk = this.file.slice(start, end); const formData = new FormData(); formData.append('file', chunk); formData.append('fileId', fileId); formData.append('chunkIndex', i); formData.append('totalChunks', totalChunks); try { const response = await this.$http.post('/api/upload - chunk', formData, { headers: { 'Content - Type': 'multipart/form - data' } }); console.log(`分片 ${i + 1}/${totalChunks} 上传成功`, response.data); } catch (error) { console.error(`分片 ${i + 1}/${totalChunks} 上传失败`, error); return; } } // 所有分片上传完成后,通知服务端合并文件 try { const mergeResponse = await this.$http.post('/api/merge - file', { fileId }); console.log('文件合并成功', mergeResponse.data); } catch (error) { console.error('文件合并失败', error); } }, generateFileId() { return Math.random().toString(36).substr(2, 9); } } };
文件夹传输与层级结构保留

对于文件夹传输,我们将在前端对文件夹进行遍历,获取文件夹内所有文件和子文件夹的信息,并将文件夹结构以特定格式(如 JSON)进行序列化,与文件一起上传到服务端。服务端在接收到文件夹信息后,按照相同的结构创建文件夹和文件,实现文件夹层级结构的保留。

信创国产化环境适配

操作系统适配

针对统信 UOS、中标麒麟和银河麒麟等信创国产操作系统,我们将进行全面的兼容性测试,确保系统在这些操作系统上能够正常运行。在开发过程中,遵循操作系统的开发规范和接口标准,避免使用与特定操作系统不兼容的代码和库。

浏览器适配

对于龙芯浏览器、红莲花浏览器和奇安信安全浏览器等信创国产浏览器,我们将通过特性检测和适配技术,确保系统的界面显示和功能操作在不同浏览器上保持一致。针对浏览器特有的安全机制和限制,进行相应的代码调整和优化,确保系统的安全性和稳定性。

数据库适配

在数据库访问层,我们将使用 Spring Data JPA 或 MyBatis 等持久层框架,通过配置不同的数据源和 SQL 映射文件,实现对 SQL Server、MySQL、Oracle、达梦和人大金仓等数据库的适配。针对不同数据库的语法差异,进行相应的 SQL 语句调整和优化,确保系统在不同数据库上能够正确执行数据操作。

安全策略与保障措施

数据传输安全

采用 HTTPS 协议进行数据传输,确保数据在传输过程中的加密和完整性保护。同时,对上传和下载的文件进行加密处理,采用对称加密和非对称加密相结合的方式,防止数据在传输过程中被窃取或篡改。

访问控制与身份认证

建立严格的访问控制机制,对不同用户角色分配不同的操作权限,确保只有授权用户才能进行文件上传和下载操作。采用基于角色的访问控制(RBAC)模型,结合用户身份认证和授权技术,如 OAuth2.0 或 JWT,实现安全的用户认证和授权管理。

数据备份与恢复

定期对系统中的文件数据进行备份,采用全量备份和增量备份相结合的方式,确保数据的安全性和可恢复性。建立数据恢复机制,在数据丢失或损坏时能够快速恢复数据,减少数据丢失对项目的影响。

总结与展望

通过采购源代码自研的方式,结合分片上传与下载、文件夹传输与层级结构保留等技术手段,以及对信创国产化环境的全面适配和严格的安全策略保障,我们有信心构建一个满足政府招投标项目需求的大文件传输系统。在后续的开发过程中,我们将持续优化系统性能,提高系统的稳定性和安全性,为政府和军工单位提供更加优质、高效的服务。同时,我们也将不断关注信创国产化技术的发展动态,及时对系统进行升级和优化,确保系统始终保持领先水平。

设置框架

安装.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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/28 8:02:15

从文本到视频只需1分钟?Open-AutoGLM自动化生成实测揭秘

第一章&#xff1a;从文本到视频只需1分钟&#xff1f;Open-AutoGLM自动化生成实测揭秘在AIGC技术飞速发展的当下&#xff0c;Open-AutoGLM作为一款新兴的多模态自动化生成框架&#xff0c;正以惊人的效率重新定义内容创作边界。其核心能力在于将自然语言描述一键转化为高质量短…

作者头像 李华
网站建设 2025/12/30 9:55:34

你真的会导出AutoGLM配置吗?:8个必须掌握的操作要点一次讲清

第一章&#xff1a;AutoGLM配置导出的核心概念AutoGLM 是一种面向生成式语言模型自动化配置管理的框架&#xff0c;其核心能力之一是将复杂的模型参数与运行时配置以结构化方式导出&#xff0c;便于版本控制、迁移和复现。配置导出不仅仅是保存参数文件&#xff0c;更涉及环境依…

作者头像 李华
网站建设 2025/12/31 0:04:12

Excalidraw移动端体验如何?iOS/Android使用评测

Excalidraw移动端体验如何&#xff1f;iOS/Android使用评测 在远程协作成为常态的今天&#xff0c;一个随手可得、开箱即用的可视化工具&#xff0c;往往能决定一次技术讨论是高效推进还是陷入混乱。尤其当团队成员分散在不同城市、甚至不同时区时&#xff0c;能否快速共享思路…

作者头像 李华
网站建设 2025/12/31 6:08:42

好写作AI:论文结论被批“太水”?你可能需要这个“灵魂拷问”AI

当导师在你精心撰写的论文结论旁批注“流于表面&#xff0c;缺乏批判性深度”时&#xff0c;那种感觉比论文被直接拒绝更糟。更讽刺的是&#xff0c;你或许已经借助了AI工具来“优化”结论&#xff0c;但它生成的版本&#xff0c;很可能只是对你前文内容的高度概括摘要——语言…

作者头像 李华
网站建设 2026/1/2 17:44:36

【Open-AutoGLM性能革命】:解锁高并发文本输入的3大关键技术

第一章&#xff1a;Open-AutoGLM性能革命的背景与意义随着大语言模型在自然语言处理领域的广泛应用&#xff0c;推理效率与部署成本成为制约其落地的关键瓶颈。Open-AutoGLM 作为新一代开源自动推理优化框架&#xff0c;旨在通过动态计算图压缩、自适应量化与缓存机制&#xff…

作者头像 李华