技术精要:数据导出与固化实用指南

数据被认为是企业发展和决策的重要资产。随着业务的不断发展和数据量的不断增加,企业通常需要将数据从不同的源头导出,并将其固化到产品中,以便进行进一步的分析、处理和利用。数据导出与固化的过程涉及到数据的提取、清洗、整合和存储,是确保数据长期有效性和可用性的关键步骤。

了解数据导出与固化的流程和方法对于企业具有重要意义。通过有效的数据导出和固化,企业可以更好地管理和利用数据资源,提升决策的准确性和效率,实现业务的持续发展和创新。本次讨论将重点探讨数据导出与固化的流程和关键步骤,帮助参与者深入了解如何将数据从导出到产品中,为企业数据管理和应用提供有力支持。

1. 数据导出与固化:将数据从导出到产品中的流程

1.1. pom依赖:

<dependency>
 <groupId>pro.shushi.pamirs.metadata.manager</groupId>
 <artifactId>pamirs-metadata-manager</artifactId>
</dependency>

1.2 将第⼆步下载后的⽂件放⼊项⽬中(注意⽂件放置的位置)。放置⼯程的resources

下⾯。例如:
技术精要:数据导出与固化实用指南

1.3 项⽬启动过程中,将⽂件中的数据导⼊(通常放在core模型的init包下

⾯)。⽰例代码:

package pro.shushi.pamirs.sys.setting.enmu;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import 
org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import 
pro.shushi.pamirs.boot.common.api.command.AppLifecycleCom
mand;
import 
pro.shushi.pamirs.boot.common.api.init.LifecycleCompleted
AllInit;
import 
pro.shushi.pamirs.boot.common.extend.MetaDataEditor;
import pro.shushi.pamirs.core.common.InitializationUtil;
import 
pro.shushi.pamirs.meta.annotation.fun.extern.Slf4j;
import pro.shushi.pamirs.meta.api.dto.meta.Meta;
import 
pro.shushi.pamirs.meta.domain.module.ModuleDefinition;
import 
pro.shushi.pamirs.metadata.manager.core.helper.DesignerIn
stallHelper;
import 
pro.shushi.pamirs.metadata.manager.core.helper.WidgetInst
allHelper;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
public class DemoAppMetaInstall implements 
MetaDataEditor, LifecycleCompletedAllInit {
 @Autowired
 private ApplicationContext applicationContext;
 @Override
 public void edit(AppLifecycleCommand command, 
Map<String, Meta> metaMap) {
 if (!doImport()) {
 return;
 }
 log.info("[设计器业务元数据导⼊]");
 InitializationUtil bizInitializationUtil = 
InitializationUtil.get(metaMap, DemoModule.MODULE_MODULE/
***改成⾃⼰的Module*/, DemoModule.MODULE_NAME/***改成⾃⼰的
Module*/);

DesignerInstallHelper.mateInitialization(bizInitializatio
nUtil, "install/meta.json");
 log.info("[⾃定义组件元数据导⼊]");
// 写法1: 将组件元数据导⼊到⻚⾯设计器. 只有在安装设计器的
服务中执⾏才有效果
 WidgetInstallHelper.mateInitialization(metaMap, 
"install/widget.json");
// 写法2: 与写法1相同效果
 InitializationUtil uiInitializationUtil = 
InitializationUtil.get(metaMap, "ui_designer", 
"uiDesigner");
 if (uiInitializationUtil != null) {

DesignerInstallHelper.mateInitialization(uiInitialization
Util, "install/widget.json");
 }
// 写法3: 业务⼯程和设计器分布式部署,且希望通过业务⼯程导⼊
⾃定义组件元数据. 业务模块需要依赖⻚⾯设计器模块,然后指定业务模块导
⼊

DesignerInstallHelper.mateInitialization(bizInitializatio
nUtil, "install/widget.json");
 }
 @Override
 public void process(AppLifecycleCommand command, 
Map<String, ModuleDefinition> runModuleMap) {
 if (!doImport()) {
 return;
 }
 log.info("[设计器业务数据导⼊]");
// ⽀持远程调⽤,但是执⾏的⽣命周期必须是
LifecycleCompletedAllInit或之后. 本地如果安装了设计器,则没有要
求
 DesignerInstallHelper.bizInitialization("install/
meta.json");
 log.info("[⾃定义组件业务数据导⼊]");
// 当开发环境和导⼊环境的⽂件服务不互通时, 可通过指定js和
css的⽂件压缩包,⾃动上传到导⼊环境,并替换导⼊组件数据中的⽂件url
// WidgetInstallHelper.bizInitialization("install/
widget.json", "install/widget.zip");
 WidgetInstallHelper.bizInitialization("install/
widget.json");
 return;
 }
 private boolean doImport() {
 // ⾃定义导⼊判断. 避免⽤于设计的开发环境执⾏导⼊逻辑
 String[] envs = 
applicationContext.getEnvironment().getActiveProfiles();
 List<String> envList = Lists.newArrayList(envs);
 return CollectionUtils.isNotEmpty(envList) && 
(envList.contains("prod"));
 }
}

2. 设计器数据导出

简介
通过调⽤导出接口,将设计器的设计数据与运动数据打包导出到⽂件中。
提供了download/export两类接⼜。
export
导出到OSS。导出的⽂件会上传到⽂件服务,通过返回的url下载导出⽂件。
请求⽰例:

mutation {
    uiDesignerExportReqMutation {
        export(
            data: { module: "gemini_core", fileName: "meta", moduleBasics: true }
        ) {
            jsonUrl
        }
    }
}

响应⽰例:

{
          "data":  {
                    "uiDesignerExportReqMutation":  {
                              "export":  {
                                        "jsonUrl":  "https://xxx/meta.json"
                              }
                    }
          },
          "errors":  [

          ],
          "extensions":  {

          }
}

download
直接返回导出数据。适⽤于通过浏览器直接下载⽂件。
请求⽰例:

mutation {
    uiDesignerExportReqMutation {
        download(
            data: { module: "gemini_core", fileName: "meta", moduleBasics: true }
        ) {
            jsonUrl
        }
    }
}

如何构造url
protocol :// hostname[:port] / path ?
query=URLEncode(GraphQL)
例:

http://127.0.0.1:8080/pamirs/base?
query=mutation%20%7B%0A%09uiDesignerExportReqMutation%20%
7B%0A%09%09download(%0A%09%09%09data%3A%20%7B%20module%3A
%20%22gemini_core%22%2C%20fileName%3A%20%22meta%22%2C%20m
oduleBasics%3A%20true%20%7D%0A%09%09)%20%7B%0A%09%09%09js
onUrl%0A%09%09%7D%0A%09%7D%0A%7D

在浏览器中访问构造后的url,可直接下载⽂件
接口列表

2.1 模型设计器

指定模块导出

#生成json
query {
    modelMetaDataExporterQuery {
        export(query: { module: "模块编码" }) {
            module
            url
        }
    }
}
#生成json文件下载
query {
    modelMetaDataExporterQuery {
        download(query: { module: "模块编码" }) {
            module
            url
        }
    }
}

module参数:指定导出的模块编码
url返回结果:export⽅式导出的⽂件url

2.2 页⾯设计器-导出页⾯

2.2.1 指定模块导出

#生成json
mutation {
    uiDesignerExportReqMutation {
        export(
            data: { module: "gemini_core", fileName: "meta", moduleBasics: true }
        ) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    uiDesignerExportReqMutation {
        download(
            data: { module: "gemini_core", fileName: "meta", moduleBasics: true }
        ) {
            jsonUrl
        }
    }
}

module参数:模块编码
fileName参数:指定⽣成的json⽂件名称
moduleBasics参数:指定是否只导出模块基础数据,如果为true,只导出内置布局、模
块菜单、菜单关联的动作。 如果为false,还会导出模块内的所有页⾯,以及页⾯关联
的动作元数据、页⾯设计数据 等等。 默认值为false。

2.2.2 指定菜单导出

#生成json
mutation {
    uiDesignerExportReqMutation {
        export(
            data: {
                menu: { name: "uiMenu0000000000048001" }
                fileName: "meta"
                relationViews: true
            }
        ) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    uiDesignerExportReqMutation {
        download(
            data: {
                menu: { name: "uiMenu0000000000048001" }
                fileName: "meta"
                relationViews: true
            }
        ) {
            jsonUrl
        }
    }
}

menu参数:菜单对象,指定菜单的name。只会导出该菜单及其绑定页⾯,不会递归查
询⼦菜单
fileName参数:指定⽣成的json⽂件名称
relationViews参数:指定是否导出关联页⾯,默认为false,只导出菜单关联的页⾯。如
果为true,还会导出该页⾯通过跳转动作关联的⾃定义页⾯。

2.2.3 指定页⾯导出

#生成json
mutation {
    uiDesignerExportReqMutation {
        export(
            data: {
                view: {
                    name: "xx_TABLE_0000000000119001"
                    model: "ui.designer.TestUiDesigner"
                }
                fileName: "meta"
                relationViews: true
            }
        ) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    uiDesignerExportReqMutation {
        download(
            data: {
                view: {
                    name: "xx_TABLE_0000000000119001"
                    model: "ui.designer.TestUiDesigner"
                }
                fileName: "meta"
                relationViews: true
            }
        ) {
            jsonUrl
        }
    }
}

view参数:视图对象,指定视图的name和model
fileName参数:指定⽣成的json⽂件名称
relationViews参数:指定是否导出关联页⾯,默认为false,只导出菜单关联的页⾯。如
果为true,还会导出该页⾯通过跳转动作关联的⾃定义页⾯。

2.3 导出组件

2.3.1 导出全部组件数据

#生成json
mutation {
    uiDesignerExportReqMutation {
        exportWidget(data: { fileName: "meta" }) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    uiDesignerExportReqMutation {
        downloadWidget(data: { fileName: "meta" }) {
            jsonUrl
        }
    }
}

fileName参数:指定⽣成的json⽂件名称
注意:⾃定义组件的元数据归属于页⾯设计器(ui_designer) 因此导⼊元数据的模块
(module)并不是业务模块。组件导⼊建议使⽤
pro.shushi.pamirs.metadata.manager.core.helper.WidgetInstallHelper

2.3.2 导出全部组件⽂件

当开发环境,和导⼊环境的oss不互通时,可通过⼀下⽅法导出⾃定义组件的css和
js⽂件压缩包,在导⼊时⽀持指定zip⽂件上传到oss,并替换导⼊组件数据中的css和js
⽂件路径。

#生成json
mutation {
    uiDesignerExportReqMutation {
        exportWidgetFile(data: { fileName: "widget" }) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    uiDesignerExportReqMutation {
        downloadWidgetFile(data: { fileName: "widget" }) {
            jsonUrl
        }
    }
}

2.4 流程设计器

2.4.1 指定模块导出

参数说明:

  • module参数:模块编码

接口示例:

#生成json
mutation {
    workflowDesignerExportReqMutation {
        export(data: { module: "resource", fileName: "meta" }) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    workflowDesignerExportReqMutation {
        download(data: { module: "resource", fileName: "meta" }) {
            jsonUrl
        }
    }
}

2.4.2 指定流程编码导出

参数说明:

  • workflowCode参数:流程编码

接口示例:

#生成json
mutation {
    workflowDesignerExportReqMutation {
        export(data: { workflowCode: "WF0000000000132500", fileName: "meta" }) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    workflowDesignerExportReqMutation {
        download(data: { workflowCode: "WF0000000000132500", fileName: "meta" }) {
            jsonUrl
        }
    }
}

2.4 数据可视化

2.4.1全部导出

接口示例:

#生成json
mutation {
    dataDesignerExportReqMutation {
        export(data: { fileName: "meta" }) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    dataDesignerExportReqMutation {
        download(data: { fileName: "meta" }) {
            jsonUrl
        }
    }
}

2.4.2 指定图表导出

参数说明:

  • chartCode参数:图表编码

接口示例:

#生成json
mutation {
    dataDesignerExportReqMutation {
        export(data: { chartCode: "CT00000000002000", fileName: "meta" }) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    dataDesignerExportReqMutation {
        download(data: { chartCode: "CT00000000002000", fileName: "meta" }) {
            jsonUrl
        }
    }
}

2.4.3指定报表导出

参数说明:

  • reportCode参数:报表编码

接口示例:

#生成json
mutation {
    dataDesignerExportReqMutation {
        export(data: { reportCode: "RP00001000", fileName: "meta" }) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    dataDesignerExportReqMutation {
        download(data: { reportCode: "RP00001000", fileName: "meta" }) {
            jsonUrl
        }
    }
}

2.4.4 指定业务⼤屏导出

参数说明:

  • screenCode参数:业务⼤屏

接口示例:

#生成json
mutation {
    dataDesignerExportReqMutation {
        export(data: { screenCode: "DS00001000", fileName: "meta" }) {
            jsonUrl
        }
    }
}
#生成json文件下载
mutation {
    dataDesignerExportReqMutation {
        download(data: { screenCode: "DS00001000", fileName: "meta" }) {
            jsonUrl
        }
    }
}

以上方式通过有效的数据导出和固化,企业可以建立可靠的数据基础设施,支持数据驱动的决策和业务发展。

Oinone社区 作者:数式-海波原创文章,如若转载,请注明出处:https://doc.oinone.top/backend/5785.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(2)
数式-海波的头像数式-海波数式管理员
上一篇 2024年2月26日 pm5:47
下一篇 2024年2月28日 pm3:11

相关推荐

  • Maven Setting 配置详解

    常用标签概览 servers/server:配置私有仓库用户名和密码进行认证,以 id 进行关联。 mirrors/mirror:配置镜像仓库拉取时的地址源和额外配置。 profiles/profile:配置多个可能使用的镜像仓库。 activeProfiles/activeProfile:配置默认激活的 profile,以 id 进行关联。 Oinone 私有仓库配置 以下配置可以在使用 Oinone 私有仓库的同时,也可以正常使用 aliyun 镜像源。 <servers> <server> <id>shushi</id> <username>${username}</username> <password>${password}</password> </server> </servers> <mirrors> <mirror> <id>shushi</id> <mirrorOf>shushi</mirrorOf> <url>http://ss.nexus.ixtx.fun/repository/public</url> <!– 忽略 https 认证,maven 版本过高时需要配置 –> <blocked>false</blocked> </mirror> </mirrors> <profiles> <profile> <id>shushi</id> <repositories> <repository> <!– 对应 server.id –> <id>shushi</id> <url>http://ss.nexus.ixtx.fun/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <!– 对应 server.id –> <id>shushi</id> <url>http://ss.nexus.ixtx.fun/repository/snapshots</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> <profile> <id>aliyun</id> <repositories> <repository> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <!– 使用 shushi 私有仓库 –> <activeProfile>shushi</activeProfile> <!– 使用 aliyun 镜像仓库 –> <activeProfile>aliyun</activeProfile> </activeProfiles> 常见问题 使用 mvn 时无法拉取 Oinone 最新版镜像,提示找不到对应的包 原因:在 Oinone 开源后,oinone-pamirs 内核相关包都被部署到 maven 中央仓库,但由于其他镜像仓库的同步存在延时,在未正确同步的其他镜像源拉取时会出现找不到对应的包相关异常。 解决方案:检查 mirrors 中是否配置了 aliyun 镜像源,如果配置了,使用上述 Oinone 私有仓库配置重新配置后,再进行拉取。这一问题是由于 mirrors 配置不当,拦截了所有从 maven 中央仓库拉取的地址替换为了 aliyun 镜像源导致的。

    2025年11月10日
    25800
  • 工作流-流程代办等页面自定义

    1. 审批/填写节点的视图页面 在界面设计器中创建对应模型的表单视图,可根据业务场景需要自定义所需流程待办的审批页面 2. 在审批/填写节点中选择刚创建的视图 在工作流待办数据权限可在节点数据权限中可对字段设置查看、编辑、隐藏

    2024年5月14日
    1.3K00
  • 如何使用位运算的数据字典

    场景举例 日常有很多项目,数据库中都有表示“多选状态标识”的字段。在这里用我们项目中的一个例子进行说明一下: 示例一: 表示某个商家是否支持多种会员卡打折(如有金卡、银卡、其他卡等),项目中的以往的做法是:在每条商家记录中为每种会员卡建立一个标志位字段。如图: 用多字段来表示“多选标识”存在一定的缺点:首先这种设置方式很明显不符合数据库设计第一范式,增加了数据冗余和存储空间。再者,当业务发生变化时,不利于灵活调整。比如,增加了一种新的会员卡类型时,需要在数据表中增加一个新的字段,以适应需求的变化。  – 改进设计:标签位flag设计二进制的“位”本来就有表示状态的作用。可以用各个位来分别表示不同种类的会员卡打折支持:这样,“MEMBERCARD”字段仍采用整型。当某个商家支持金卡打折时,则保存“1(0001)”,支持银卡时,则保存“2(0010)”,两种都支持,则保存“3(0011)”。其他类似。表结构如图: 我们在编写SQL语句时,只需要通过“位”的与运算,就能简单的查询出想要数据。通过这样的处理方式既节省存储空间,查询时又简单方便。 //查询支持金卡打折的商家信息:   select * from factory where MEMBERCARD & b'0001'; // 或者:   select * from factory where MEMBERCARD & 1;    // 查询支持银卡打折的商家信息:   select * from factory where MEMBERCARD & b'0010'; // 或者:   select * from factory where MEMBERCARD & 2; 二进制( 位运算)枚举 可以通过@Dict注解设置数据字典的bit属性或者实现BitEnum接口来标识该枚举值为2的次幂。二进制枚举最大的区别在于值的序列化和反序列化方式是不一样的。 位运算的枚举定义示例 import pro.shushi.pamirs.meta.annotation.Dict; import pro.shushi.pamirs.meta.common.enmu.BitEnum; @Dict(dictionary = ClientTypeEnum.DICTIONARY, displayName = "客户端类型枚举", summary = "客户端类型枚举") public enum ClientTypeEnum implements BitEnum { PC(1L, "PC端", "PC端"), MOBILE(1L << 1, "移动端", "移动端"), ; public static final String DICTIONARY = "base.ClientTypeEnum"; private final Long value; private final String displayName; private final String help; ClientTypeEnum(Long value, String displayName, String help) { this.value = value; this.displayName = displayName; this.help = help; } @Override public Long value() { return value; } @Override public String displayName() { return displayName; } @Override public String help() { return help; } } 使用方法示例 API: addTo 和 removeFrom List<ClientTypeEnum> clientTypes = module.getClientTypes(); // addTo ClientTypeEnum.PC.addTo(clientTypes); // removeFrom ClientTypeEnum.PC.removeFrom(clientTypes); 在查询条件中的使用 List<Menu> moduleMenus = new Menu().queryListByWrapper(menuPage, LoaderUtils.authQuery(wrapper).eq(Menu::getClientTypes, ClientTypeEnum.PC));

    2023年11月24日
    1.4K00
  • 工作流用户待办过滤站内信

    工作流用户待办过滤站内信 全局过滤 启动工程application.yml中配置: pamirs: workflow: notify: false 个性化过滤 实现pro.shushi.pamirs.workflow.app.api.service.WorkflowMailFilterApi接口 返回true表示需要发送站内信 返回false表示不需要发送站内信 示例: import org.apache.commons.lang3.StringUtils; import pro.shushi.pamirs.message.model.PamirsMessage; import pro.shushi.pamirs.meta.annotation.Fun; import pro.shushi.pamirs.meta.annotation.Function; import pro.shushi.pamirs.user.api.model.PamirsUser; import pro.shushi.pamirs.workflow.app.api.model.WorkflowUserTask; import pro.shushi.pamirs.workflow.app.api.service.WorkflowMailFilterApi; /** * MyWorkflowMailFilterImpl * * @author yakir on 2025/02/24 16:28. */ @Fun(WorkflowMailFilterApi.FUN_NAMESPACE) public class MyWorkflowMailFilterImpl implements WorkflowMailFilterApi { @Override @Function public Boolean filter(WorkflowUserTask workflowUserTask, PamirsUser user, PamirsMessage message) { // 按用户待办过滤 workflowUserTask if (10000L == workflowUserTask.getInitiatorUid()){ return true; } // 按用户过滤 user if (1000L == user.getId()){ return true; } // 按站内信消息过滤 message if (StringUtils.contains(message.getBody(), "你好")) { return true; } return false; } }

    2025年2月24日
    88800
  • 如何扩展自有的文件存储系统

    介绍 数式Oinone默认提供了阿里云、腾讯云、华为云、又拍云、Minio和本地文件存储这几种文件存储系统,如果我们有其他的文件存储系统需要对接,或者是扩展现有的文件系统,可以通过SPI继承AbstractFileClient注册新的文件存储系统。 代码示例 这里以扩展自有的本地文件系统为例 继承了内置的本地文件存储LocalFileClient,将其中上传文件的方法重写 package pro.shushi.pamirs.demo.core.file; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest; import pro.shushi.pamirs.framework.connectors.cdn.client.LocalFileClient; import pro.shushi.pamirs.meta.annotation.fun.extern.Slf4j; import pro.shushi.pamirs.meta.common.spi.SPI; import javax.servlet.http.HttpServletRequest; @Slf4j @Component // 注册新的文件存储系统类型 @SPI.Service(DemoLocalFileClient.TYPE) @RestController @RequestMapping("/demo_file") public class DemoLocalFileClient extends LocalFileClient { public static final String TYPE = "DEMO_LOCAL"; @Override public CdnFileForm getFormData(String fileName) { CdnConfig cdnConfig = getCdnConfig(); CdnFileForm fileForm = new CdnFileForm(); String uniqueFileName = Spider.getDefaultExtension(CdnFileNameApi.class).getNewFilename(fileName); String fileKey = getFileKey(cdnConfig.getMainDir(), uniqueFileName); //前端获取uploadUrl,上传文件到该地址 fileForm.setUploadUrl(cdnConfig.getUploadUrl() + "/demo_file/upload"); //上传后,前端将downloadUrl返回给后端 fileForm.setDownloadUrl(getDownloadUrl(fileKey)); fileForm.setFileName(uniqueFileName); Map<String, Object> formDataJson = new HashMap<>(); formDataJson.put("uniqueFileName", uniqueFileName); formDataJson.put("key", fileKey); fileForm.setFormDataJson(JSON.toJSONString(formDataJson)); return fileForm; } @ResponseBody @RequestMapping(value = "/upload", produces = "multipart/form-data;charset=UTF-8",method = RequestMethod.POST) public String uploadFileToLocal(HttpServletRequest request) { MultipartFile file = ((StandardMultipartHttpServletRequest) request).getFile("file"); // 例如可以根据file文件类型判断哪些文件是否可以上传 return super.uploadFileToLocal(request); } } 在application.yml内配置 cdn: oss: name: 本地文件系统 # 这里的type与代码中定义的文件存储系统类型对应 type: DEMO_LOCAL bucket: pamirs uploadUrl: http://127.0.0.1:8190 downloadUrl: http://127.0.0.1:6800 validTime: 3600000 timeout: 600000 active: true referer: localFolderUrl: /Users/demo/workspace/static

    2024年10月24日
    65500

Leave a Reply

登录后才能评论