1、什么是附件存储策略

在V7.4.0版本中 sys_attachment 中增加了一个SA_STRATEGY_ID字段用于存储附件件存储策略ID。

附件存储策略ID在附件保存时同步生成,不同策略对应的ID值不同,相同的则一致。

以OSS存储为例,例如对OSS的存储设置如下:如图所选OSS类型为“阿里云OSS”,存储站点设置为“dn-zcg”。

则通过以上配置上传文件时,会先在知识库中的dn_upload_store_strategy表中插入一条存储策略数据,其中STORE_CONFIG字段中用于存放具体的存储策略,主键ID_值即附件表中的SA_STRATEGY_ID。

例如上述OSS配置存储为:{"bucket":"dn-zcg","configKey":"oss_aliyun","dbConnect":"KSBBD___bdc_2016_09_08114323939","type":"OSS"}。其中体现了对应OSS配置的存储站点所选的OSS配置内部名称附件表所在的数据连接存储类型。在下图中可以看到对应值和后台第三方设置-OSS中的配置可以映射上。(注意:保存路径变更不会变更策略,因为路径本身已经存储在附件表的sa_server_path中)

上传的文件在附件表sys_attachment中的SA_STRATEGY_ID字段值存放的就是该条存储策略的主键ID_字段值。有了该存储策略字段以后,当我们中途变更OSS或存储站点,甚至变更整个附件的存储方式。之后上传的文件存储策略ID与之前的策略ID将是不同的。

依托上述机制,每个上传文件的存储策略配置都备份在知识库中,只要根据附件的SA_STRATEGY_ID就可以找到对应的存储 配置,那么变更存储方式前的历史文件仍然能被访问。

因此附件数据是否可以获取的关键就在于附件表sys_attachment中存放的数据与知识库存储策略表dn_upload_store_strategy数据的映射关系。

2、如何兼容V7.4.0版本前的附件数据

由于之前的附件表没有存储策略ID字段,历史数据自然也没有对应的策略ID值,所以在加载时默认按照当前字段配置的存储配置进行加载(存储介质对应不上就无法加载附件)。

这里提供一种解决思路:用原存储配置生成存储策略ID,为旧数据赋值,步骤如下:

  1. 设置之前的存储配置
  2. 通过该存储设置上传一个文件
  3. 此时知识库中生成了上述配置的存储策略ID
  4. 将生成存储策略ID通过数据库改写方式赋值到旧数据附件表SA_STRATEGY_ID字段中

3、如何迁移附件

在对附件进行迁移时,如果只是路径变更,则修改对应的附件表sys_attachment对应sa_server_path中的值即可。

如果涉及存储策略变更,则需要同步变更SA_STRATEGY_ID上的值,具体步骤与兼容旧数据类似:

  1. 配置新的存储策略
  2. 通过该存储设置上传一个文件
  3. 生成对应的存储策略ID
  4. 将生成存储策略ID替换老的存储策略ID
作者:Eric  创建时间:2025-04-18 16:01
最后编辑:Eric  更新时间:2026-04-30 18:28