最近负责项目组内部的一个文件上传的公用组件设计,中间经历了几次代码和功能的变更,以至于出现了组件的版本问题,旧的组件已经被组内其他人使用,新的版本组件又增加了新的组件功能,出现了功能和代码的覆盖,需要高版本兼容低版本的代码。
总结来说,公用组件的设计支出需要考虑一下几点:
1、泛用性需求的整理
2、组件的扩展
3、调用组件的方式
那文件上传这个组件举例说明:
首先,文件上传组件通常包含几个泛用性比较强的功能:上传附件,附件管理(删除附件,预览附件,附件下载),附件限制(附件格式限制,附件数量限制,附件大小限制),上传/删除成功回调(消息提示,文件标识存储(保证附件唯一)),另外还可以包含的功能:多附件压缩打包下载,附件内容解析与导入(限制excel),组件的异常(断点续传)与安全。
上传附件:文件上传的核心功能;
附件管理:对上传的附件做增删改成的管理
附件限制:特殊业务场景,需要对文件的大小与格式有限制,也有一定的安全保障在内,限制用户上传非附件的文件,如脚本,jar,exe等执行文件
上传/删除成功回调:附件上传/删除成功,需要返回一个消息提示调用端结果,有些业务需要保存该文件的唯一标识符与真实文件名,这些都需要通过回调来实现。
多附件压缩打包下载:某些业务场景,涉及众多附件的下载,不肯能一个个点,或者一个个下载,需要在服务器压缩打包,以压缩包的格式下载。
附件内容解析与导入:这个功能使用在很多业务场景比较多,可以独立成单独的一个excel导出,导出功能组件了,也可以集成到附件上传组件内。
组件的异常与安全:组件的异常处理,保证服务器,网络等导致的异常可以正常通过消息提醒反馈,以及断点续传等。组件的安全性,有篇文章讲可以把GIF或者 JPG文件和JAR文件捆绑在一起,然后欺骗服务器以为是GIF或JPG文件,然后在客户端的JVM中执行JAR,因为附件组件还需要遵循一些安全规则:
1. 文件上传的目录设置为不可执行
2. 判断文件类型(附件限制)
3. 单独设置文件服务器的域名,防止xss
4. 改写文件名,文件路径不可预测
当然,要完整设计一个良好,安全的组件是很难的,需要不断的迭代更新,和扩展。