作为一名自由职业者,我最近接了一个外包项目。客户是一家在行业内颇具影响力的企业,他们现有的 WEB 系统需要新增大文件上传功能,具体要求是能在页面上支持 10G 左右大文件的上传和续传。
客户对这个项目十分重视,毕竟这关系到他们业务系统后续处理大规模数据的能力。他们希望新功能能无缝集成到现有系统中,就像给一辆高性能跑车更换更强劲的引擎,不仅要动力提升,还得运行平稳,不能影响其他部件的正常工作。而且,他们特别强调了自主可控,这就好比把自家房子的钥匙牢牢握在自己手里,对系统的各个环节都要有绝对的掌控权,以确保数据安全和系统稳定。
为了满足客户需求,我开始四处寻找合适的解决方案。在网上搜索资料时,我发现很多方案都不尽人意。有些文章内容重复,要么只侧重前端,要么只有后端,代码看起来就像没经过实战检验的“花架子”,根本没法直接用到项目里。论坛里的讨论也大多缺乏真实项目经验,很多回答都是凭想象,提供不了有价值的参考。甚至有些所谓的开源方案,都没人维护,就像一座废弃的城堡,虽然外观还在,但里面早已破败不堪。
不过,皇天不负有心人,我最终发现了百度开源组件 webuploader。这个组件就像一把万能钥匙,完美契合了客户的需求。它采用出色的架构设计,支持超大文件分片、分段、分块、分割上传下载和断点续传。就好比把一个巨大的包裹拆分成多个小包裹,分别寄送,即使中途出现意外,也能从断点处继续,大大提高了上传的效率和稳定性。而且,它还支持文件夹上传、下载断点续传,能保留文件夹层级结构,并将层级结构信息保存到数据库,下载时同样能完美还原,就像给文件和文件夹建立了一个清晰的地图,无论怎么传输,都能准确找到自己的位置。
在安全性方面,webuploader 也表现出色。它支持加密上传、下载加密、端到端加密,采用国密 SM4 加密算法,保证数据在传输过程中就像被装进了一个坚不可摧的保险箱,只有拥有正确钥匙的人才能打开,确保了数据的安全性和隐私性。
从技术实现的角度来看,webuploader 与 vue 的兼容性非常好。我的项目使用的就是 vue 框架,它能轻松集成到现有系统中,就像把一个新的零件顺利安装到一台精密机器里,不会产生任何冲突。在开发过程中,我先了解了 chrome 提供的 API 的使用方法,每个参数的功能都通过百度搜索和官方文档进行了深入研究,就像熟悉一把新工具的使用说明书,只有掌握了它的每一个细节,才能发挥出它的最大威力。
然后,我开始进行功能设计,画出详细的流程图。功能实现分为前后端两部分,前端主要负责文件的分块上传逻辑,就像一个聪明的指挥官,合理分配任务,将大文件拆分成小块,并按照一定的顺序上传;后端则负责文件块数据的接收和保存,就像一个勤劳的仓库管理员,将接收到的文件块整齐地存放起来,并在需要的时候进行合并和还原。
在开发过程中,我也遇到了一些小问题,但通过查看 webuploader 的官方文档和社区讨论,都顺利解决了。就像在黑暗中行走时,手中有了一盏明灯,每一步都走得更加坚定。经过一段时间的努力,我终于成功实现了 10G 左右大文件的上传和续传功能,并且经过了严格的测试,确保在各种情况下都能稳定运行。
客户对这个解决方案非常满意,他们不仅获得了满足需求的功能,还拥有了 100%自主可控的权限,可以将源代码集成到自己的产品中,并分发给其他用户使用。这就好比他们拥有了一座属于自己的宝藏,可以自由地开发和利用。
通过这个项目,我深刻体会到了选择合适的开源组件的重要性。一个好的开源组件就像一个得力的助手,能帮助我们快速高效地完成项目,解决各种难题。同时,也让我更加坚定了不断学习和探索新技术的决心,以便在未来的项目中能为客户提供更好的解决方案。
将up6组件复制到项目中
示例中已经包含此目录
引入up6组件
配置接口地址
接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表
参考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de
处理事件
启动测试
启动成功
效果
数据库
效果预览
文件上传
文件刷新续传
支持离线保存文件进度,在关闭浏览器,刷新浏览器后进行不丢失,仍然能够继续上传
文件夹上传
支持上传文件夹并保留层级结构,同样支持进度信息离线保存,刷新页面,关闭页面,重启系统不丢失上传进度。
批量下载
支持文件批量下载
下载续传
文件下载支持离线保存进度信息,刷新页面,关闭页面,重启系统均不会丢失进度信息。
文件夹下载
支持下载文件夹,并保留层级结构,不打包,不占用服务器资源。