一. 功能需求
先说一下需求,几十个人的小企业分布在不同城市,平常通过微信和百度云盘交换和共享一些文件,微信和百度云盘都有缺陷。我们的需求是:
- 用户需要登录才能访问和操作
- 不同的用户有不同的权限,能看到不同的目录
- 不同的用户对文件和目录的增删改查都有权限控制
- 远程文件直接保存在云盘上
- 用户和功能管理尽量简化,不需要数据库,不需要web管理端
二. 解决方案
再考虑一下解决方案:
- 涉及到本地和远程大量文件的上传和下载,使用bs模式还是不合适的,采用c/s模式
- 不使用数据库,使用2个json文件来配置用户和权限
- 不需要web管理端,通过client来配置,只有管理员可以远程配置那2个json文件
- 云盘在七牛和阿里云oss对象存储中选择,最后选择阿里云,因为七牛没有显式的远程目录概念,通过后缀/搜索一直没有成功。
- 桌面应用client本来考虑使用electron+vue来实现,尝试了一下,还是放弃,主要原因是产生的应用包太大,快100m,快100个文件,升级一次岂不累死。
- 涉及到跨平台,需要在windows和mac下运行,所以java是好的选择,涉及到技术是swing和javafx,笔者swing早年很熟,javafx没接触过,但是经过比较还是选择javafx来实现。
元旦三天完成基本功能,包括javafx的客户端和java springboot的服务端,客户端通过IDEA的build archive功能生成就一个jar包,2m+,双击就能运行,还是很方便的,GUI很简陋,但是基本功能都有了,先看界面截图:
三. 服务端设计和实现
服务端就一个用户管理,没什么设计,就是springboot搭建一个webapi项目,接口都是围绕2个json配置文件来操作。以下是二个json的设计,我列出来给大家参考:
其中group.json里的
key
表示阿里云的oss存储的key和secret等值拼凑出的字符串。
role
是四位数字字符串,对应增删改查的权限。1表示有权限,0表示没有。
四. 客户端设计和实现
客户端基本上就是以精简为主,减少使用第三方库,临时生成的配置文件都保存在系统用户目录下,保证一个jar包拷贝到任何地方可以运行。
总体上javafx使用方式,没有采用javafx支持的fxml和css方式(因为不习惯,其实是不会),所有gui完全通过代码来构成,基本参考的文档是http://www.javafxchina.net/main/,javafx总体上在国内是小众,感谢这个网站和相关的人对javafx技术的总结和宣传,基本上问题在上面都能找到。
有一点要注意,启动worker工作线程后,对ui的任何操作都需要回到ui线程来操作,这点和所有gui相关的技术都类似。
其它细节大家可以参考源码,源码已经提交到git,下载如果需要跑起来,需要把服务端跑起来,然后把客户端Constant.java里的url地址指向服务端地址。
时间短,里面肯定bug和问题有不少,希望对大家学习和使用JavaFX技术有所帮助