LuBase低代码框架中所有的图片、文件等附件默认存储到本地磁盘,但是一些私有化部署的企业大多有私有云存储,那么如何扩展下对解决到外部存储呢?首先呢我们需要了解下LuBase低代码框架文件存储的原理,以下介介绍下LuBase框架文件存储涉及到的表及扩展方法。

一、系统文件如何存储的

系统内表单中图片字段、附件字段,以及通过调用文件上传接口上传的文件,物理文件默认采用的本地存储,通过配置文件custom.file-upload.storage-type属性进行位置的控制。

文件和数据之间的映射关系通过以下两张表存储,具体如下:

sd_file_info文件存储记录表:

列代码

字段含义

id

主键id

storage_service

文件使用的服务,默认值是localFileStorageService

file_path

文件存储路径

file_name

自动生成的不重复的文件名字

original_name

文件原始的名字

file_size

文件大小,单位是字节

ex_type

文件扩展名

md5

文件唯一特征码。特征码相同的文件在此表不会重复存储

sd_file_relation 业务数据和文件的关系记录表

id

主键id

app_id

预留字段,暂时无用

data_id

附件对应的业务数据主键id

data_column_tag

附件对应的业务数据列的标识。因为一条业务数据可以有多个附件字段,通过data_column_tag来识别具体哪个附件字段存储的记录。

data_column_tag格式:业务数据表结构(dm_table)的主键id+英文逗号+业务数据列的code。例如:679613636607479808,img_key

file_info_id

外键字段,存储sd_file_info表主键id

original_name

文件原始的名字。

因同一特征码文件在sd_file_info只存储一次,但是在不同上传场景可能此文件名字不一样,所以此字段存储文件原始名字

二、如何扩展文件存储服务

如果需要对文件的存储进行扩展的话,可以通过实现FileStorageService接口,修改配置文件custom.file-upload.storage-type 为实现的服务名即可。此配置项不配置的默认值为:localFileStorageService。

public interface FileStorageService {
    /**
     * 将二进制文件流进行存储
     *
     * @param group      预留参数,暂时无用
     * @param fileName   文件原始名字
     * @param uniqueName 文件唯一名字,自动生成
     * @param bs         文件流
     * @return 文件存储路径
     * @throws IOException
     */
    String writeFile(String group, String fileName, String uniqueName, byte[] bs) throws IOException;

    /**
     * 根据文件存储路径和文件名字读取文件
     *
     * @param filePath   文件路径
     * @param fileName   文件原始名字
     * @param uniqueName 文件唯一名字,在存储文件时生成的名字
     * @return
     */
    byte[] readFile(String filePath, String fileName, String uniqueName);
}

在扩展FileStorageService服务时,无需手动存储sd_file_info和sd_file_relation两张表数据,会自动存储。

三、如何验证扩展的存储服务功能正常

最后附上测试用例,用以检查下您的扩展是否功能正常。以下罗列了部分测试用例,方便对新服务进行测试

序号

场景

期望

1

在同一条数据中,表单中多值附件字段,上传同名内容不同附件

文件下载正常

删除一个附件时,不影响其他

2

在不同数据中,上传同名不同内容附件

文件下载正常

删除一个附件时,不影响其他

3

在不同数据中,上传内容相同名称不同的附件

文件下载正常

删除一个附件时,不影响其他

4

在同一条数据中,上传内容相同名称不同的附件

文件下载正常

删除一个附件时,不影响其他

LuBase低代码系列文章:

【开发工具自荐】LuBase 低代码开发框架介绍-可私有化部署-CSDN博客

【LuBase低代码框架】表单引擎字段类型设计-CSDN博客

Logo

低代码爱好者的网上家园

更多推荐