来公司的第一个需求,学到了一个新的思路

153 阅读3分钟

早上一来到办公室,组长就给了我一个需求:

首先,让互联网上运行的项目的页面新增一个附件的上传和下载接口,支持多个附件

其次,在给这个页面的数据做一个批量导出和无限制导出的接口

然后,得到导出的数据后,要把数据在内网项目中导入,并且加入到内网项目的审批流中去

我仔细一想,这上传下载那不是轻轻松松,我直接搞到文件服务器上去,在搞一张关系表进行存储。

结果组长贼兮兮的告诉我,外网没有文件服务器,你需要把数据导出过后,在内网导入,在内网进行文件服务器上传操作,文件服务器不对外网开放。。。

0033zi1ggy1hjmdfj41u1j60pr0prwfi02.jpg

不过这个问题也是很好解决的,我很快就出了几个方案:

1、我们就把当前服务器当做文件服务器,客户将附件上传后,就以一定的规则存储在本地,下载的时候就以一定的规则去下载。

2、我们直接在数据库新增一个LongBLOB类型的字段,去存储附件的二进制流文件,方便又简单,还不用去维护附件与数据之间的关系。

并且在仔细思考这两种方法后,我果断选择了第二种。(如果选择第一种方法,那么我们在导出数据的时候就会面临着数据和附件对应关系的维护,并且还需要思考在导入的时候,又如何做到与确定数据与文件的关系)

在确定选择第二种方法后,问题又接踵而至,在导出的时候,我又该导出为什么文件呢?(要求在导入的时候通过字段匹配获取数据)

excel?word?还是JSON格式的txt? 不管是excel还是word,又或者是txt在导出和导入的时候都会遇到一个问题,我的大文本二进制流如何存储,直接存储太长了能存下吗?存下了在导入的时候也需要通过自定义的解析文件的方式进行读取,并且在读取的时候,获取到的二进制流就已经是字符串类型的了,在恢复成文件时,二进制流就会被当做字符串直接写入到文件中去(别问我为什么知道,说多了都是泪)。

h2数据库

H2是开源的轻量级Java数据库,它可以嵌入Java应用程序中或以客户端(Client)-服务器(Server)模式运行,H2数据库主要可以配置为内存数据库运行和基于磁盘运行。

看到这里,相信了解h2数据库的大佬就已经明白了,没错,我们可以通过h2数据库,将我们需要导出的数据直接生成为.db类型的数据库文件,我们只需要导入这个数据库文件,内网就可以从中查询到我们想要导入的数据以及正确的二进制流文件。直接避免了附件和数据需要特定规则维护的麻烦以及导出为各种各样的文件类型然后又解析的问题。