如何配置文件存储地址为相对路径

介绍

大部分情况下,文件存储的配置都会配置uploadUrldownloadUrl的值,这样图片和文件类型的业务字段会存储带域名的全路径文件地址,但是有些场景需要用户在专有内网的时候访问内网的文件存储地址,用户在公网的时候通过公网访问(一般情况下这个公网ip内部最后还是会转发到内网)文件存储地址,这个时候就要求存在数据库字段里的不能是全路径的地址,只能是想相对路径,这个时候可以通过前端访问的域名用nginx转发当前域名下的文件请求到所匹配环境的ip内的文件存储服务。

配置参考

cdn:
  oss:
    name: 本地文件NG系统
    type: LOCAL
    bucket: pamirs
    # 此处可以不配置值,也可以配置相对路径前缀方便做转发
    uploadUrl:
    downloadUrl:
    validTime: 3600000
    timeout: 600000
    active: true
    referer:
    localFolderUrl: /test/static
文件上传的路径同步配置nginx转发
        location ~ /file/upload {
            // 此处配置为后端服务的ip+端口
            proxy_pass http://127.0.0.1:8190;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
excel导入场景相对路径在后端代码内无法保存导入的文件

在导入任务的前置hook处理相对文件路径的前缀

package pro.shushi.pamirs.demo.core.hook;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import pro.shushi.pamirs.file.api.FileModule;
import pro.shushi.pamirs.file.api.model.ExcelImportTask;
import pro.shushi.pamirs.meta.annotation.Hook;
import pro.shushi.pamirs.meta.api.core.faas.HookBefore;
import pro.shushi.pamirs.meta.api.dto.fun.Function;

@Component
public class DemoExcelImportTaskActionHookBefore implements HookBefore {

    // 内网访问文件的地址
    public static final String INNER_HOST = "http://127.0.0.1:6800";

    @Override
    @Hook(module = {FileModule.MODULE_MODULE}, model = {ExcelImportTask.MODEL_MODEL}, fun = {"createImportTask"})
    public Object run(Function function, Object... args) {
        if (args.length > 0) {
            ExcelImportTask excelImportTask = (ExcelImportTask) args[0];
            if (excelImportTask != null && excelImportTask.getFile() != null && StringUtils.isNotBlank(excelImportTask.getFile().getUrl())) {
                excelImportTask.getFile().setUrl(INNER_HOST + excelImportTask.getFile().getUrl());
            }
        }
        return null;
    }
}

注意事项

上面的例子为本地文件NG系统的,如果是阿里云oss、7牛云等第三方文件存储服务,downloadUrl可以按上面方案直接配置,uploadUrl还是要按正常配置

Oinone社区 作者:nation原创文章,如若转载,请注明出处:https://doc.oinone.top/install/13988.html

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

(0)
nation的头像nation数式员工
上一篇 2024年6月20日 am9:49
下一篇 2024年6月21日 pm7:40

相关推荐

  • RocketMQ如何配置日志路径和日志自动清理规则

    RocketMQ的日志路径和日志自动清理规则可以通过以下方式进行配置: 配置日志路径 对于RocketMQ客户端: RocketMQ客户端日志默认存储在系统盘的特定位置,但你可以通过JVM启动参数来修改日志的输出路径。例如,在启动Java应用时,可以通过 -Dlogging.path 或 -Drocketmq.client.logRoot 参数指定日志根目录。例如: java -Drocketmq.client.logRoot=/path/to/your/log/directory -jar your_application.jar 对于RocketMQ服务端(Broker和NameServer): RocketMQ服务端的日志路径通常在 conf/logback_broker.xml(对于Broker)和 conf/logback_namesrv.xml(对于NameServer)配置文件中定义。你可以在这些XML配置文件中修改 <property name="LOG_HOME"> 的值来改变日志存储路径。 配置日志自动清理规则 RocketMQ服务端提供了日志滚动策略来自动清理旧日志,这通常在上述提到的 logback_broker.xml 和 logback_namesrv.xml 文件中通过Logback的RollingPolicy配置实现。例如,可以配置文件大小限制、保留文件数量等: <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/rocketmq.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!– 按天滚动日志文件 –> <fileNamePattern>${LOG_HOME}/archived/rocketmq.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!– 保留最多30天的日志 –> <maxHistory>30</maxHistory> <!– 单个日志文件最大大小,默认RocketMQ不直接支持配置此参数,但可通过Logback的SizeAndTimeBasedFNATP配置间接控制 –> <!–<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">–> <!–<maxFileSize>100MB</maxFileSize>–> <!–</timeBasedFileNamingAndTriggeringPolicy>–> </rollingPolicy> … </appender> 请注意,虽然RocketMQ客户端日志默认不直接支持配置单个日志文件大小,但你可以通过外部日志框架(如Logback或Log4j)的配置来间接影响日志文件的大小管理。 对于日志清理,RocketMQ本身对于消息存储的文件有自动清理机制,但针对日志文件的自动清理主要依赖于日志框架的配置,如上述Logback的配置示例所示。 确保在修改任何配置前备份原有的配置文件,并且理解修改可能对系统监控和故障排查造成的影响。

    2024年5月28日
    3.5K00
  • 【Oracle】后端部署使用Oracle数据库

    Oracle数据库配置 驱动配置 jdbc仓库 https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 Maven配置(11g版本可用) <ojdbc.version>23.2.0.0</ojdbc.version> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>${ojdbc.version}</version> </dependency> JDBC连接配置 pamirs: datasource: base: type: com.alibaba.druid.pool.DruidDataSource driverClassName: oracle.jdbc.OracleDriver url: jdbc:oracle:thin:@//127.0.0.1:1521/orcl username: YOUR_SCHEMA_NAME password: xxxxxx Oracle默认为每个用户创建了一个与当前用户名同名的模式,每个用户应该只使用该模式(DBA用户除外),因此平台使用Oracle时应该通过username处指定与该模式同名的用户名来指定模式。(Oracle多数据源时每一个数据库创建一个用户) 创建用户时用户名应全大写。 连接url配置 官方文档 https://odbc.postgresql.org/docs/config-opt.html url格式 jdbc:oracle:thin:@//ip:端口号/服务名或SID 每一个Oracle进程默认为一个Oracle数据库实例,使用服务名或sid登录该Oralce数据库实例。一个Oracle sid 对应一个数据库实例,而一个服务名可以标识多个数据库实例。远程连接时推荐使用服务名进行连接。可以在安装Oracle的机器上打开SQLPlus,用SYSTEM用户登录上去后使用SELECT SYS_CONTEXT('USERENV', 'INSTANCE_NAME') AS SID FROM DUAL;查询登录使用的sid;也可以使用SELECT VALUE AS SERVICE_NAME FROM V$PARAMETER WHERE NAME = 'service_names';查询登录使用的服务名。 其他连接参数如需配置,可自行查阅相关资料进行调优。 方言配置 pamirs方言配置 pamirs: dialect: ds: base: type: Oracle version: 11.2 major-version: 11g pamirs: type: Oracle version: 11.2 major-version: 11g plus: configuration: jdbc-type-for-null: "NULL" using-model-as-property: true using-statement-handler-dialect: true mapper: batch: useAffectRows global: table-pattern: '${table_30}' column-pattern: '${column_30}' 数据库版本 type version majorVersion 11g – 11.2.0.1.0 Oracle 11.2 11g 12c – 12.2.0.1.0 Oracle 12.2 12c PS:由于方言开发环境为Oracle Database 11g Enterprise Edition Release 11.2.0.1.0版本,其他类似版本(11.2.x)原则上不会出现太大差异,如出现其他版本无法正常支持的,可在文档下方留言。 schedule方言配置 pamirs: event: enabled: true schedule: enabled: true dialect: type: Oracle version: 11.2 major-version: 11g 其他配置 逻辑删除的值配置 pamirs: mapper: global: table-info: logic-delete-value: (CAST(SYSTIMESTAMP AS DATE) – TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS')) * 8640000000000 Oracle数据库用户初始化及授权 — 以下命令均使用dba账户执行 — 创建用户 ONE_TEST (用户名需全大写) 密码 123456 CREATE USER ONE_TEST IDENTIFIED BY 123456; — 解锁用户 ALTER USER ONE_TEST ACCOUNT UNLOCK; — 将用户的默认表空间设置为USERS,临时表空间设置为TEMP ALTER USER ONE_TEST DEFAULT TABLESPACE USERS; ALTER USER ONE_TEST TEMPORARY TABLESPACE TEMP; — 可以用以下命令查询某用户的表空间: SELECT…

    2025年7月10日
    39700
  • Oinone设计器部署参数说明

    概述 Oinone提供两种设计器部署方式,合作伙伴可以自行选择适合自己的部署方式。 Docker配置参数 环境变量 ARG_ENV:指定spring.profiles.active(默认:dev) ARG_LIFECYCLE:指定-Plifecycle(默认:INSTALL) JVM_OPTIONS:jvm参数 PROGRAM_ARGS:程序参数 JVM_OPTIONS和PROGRAM_ARGS参数说明 java [JVM_OPTIONS?] -jar boot.jar [PROGRAM_ARGS?] 端口说明 PS:以下为目前设计器镜像的全部端口,不同类型镜像的端口由于内置服务不同,使用的端口数量不同,但端口号是完全一致的。 80:前端服务端口(设计器访问入口) 8091:后端服务端口 8093:后端EIP服务端口 20880:Dubbo端口 3306:内置MySQL端口 2181:内置Zookeeper端口 6379:内置Redis端口 9876/10991:内置RocketMQ端口 9999:内置本地OSS默认端口 挂载目录说明(挂载虚拟卷) /opt/pamirs为镜像的工作目录,所有挂载目录均在该目录下。 /opt/pamirs/ext:应用配置文件目录;包含application.yml、logback.xml、license.lic等配置文件 /opt/pamirs/nginx/vhost:Nginx配置文件目录 /opt/pamirs/logs:后端服务日志目录 /opt/mq/conf/broker.conf:RocketMQ的broker配置文件 /opt/pamirs/outlib:非设计器内置包的外部加载目录(外部库),可以添加任何jar包集成到设计器中。 /opt/pamirs/dist:前端服务目录 /opt/pamirs/static:前端静态文件目录;LOCAL类型的OSS上传和下载目录; docker run启动常用参数 -e:指定环境变量 -p:指定端口映射 -v:指定挂载目录(挂载虚拟卷) docker run [OPTIONS] IMAGE [COMMAND] [ARG…] docker compose启动常用配置 services: container: image: $IMAGE container_name: $CONTAINER_NAME restart: always # docker run -e environment: KEY1: VALUE1 KEY2: VALUE2 … # docker run -p ports: – $machinePort1:$containerPort1 – $machinePort2:$containerPort2 … # docker run -v volumes: – $machinePath1:$containerPath1 – $machinePath2:$containerPath2 … docker compose常用命令 # 使用docker-compose.yaml启动 docker compose up -d # 使用docker-compose.yaml停止并删除容器 docker compose down -v # 指定配置文件启动 docker compose -f config.yaml up -d # 指定配置文件停止并删除容器 docker compose -f config.yaml down -v JAR包方式启动 下载Oinone专属启动器 oinone-boot-starter.zip 启动命令变化 # 原命令 java -jar boot.jar # 变更后命令 boot-starter java -jar boot.jar PS:更多命令可查看后端无代码设计器Jar包启动方法

    2024年11月4日
    1.3K00
  • 【界面设计器】树下拉/级联

    阅读之前 你应该: 熟悉模型的增删改查相关内容。【界面设计器】模型增删改查基础 了解联动关系的相关内容。【界面设计器】左树右表 名词解释 字段组件:为字段提供交互能力的组件,一个字段对应一个组件。 关联关系字段:在模型中与其他模型建立关联关系的字段。 可选项:选择组件使用的具体选项,可以是静态的,也可以是动态的。 选中:用户在使用选择组件时,针对某一选项标记或提取这一选项。 概述 本章内容主要是对【界面设计器】左树右表内容中提及的字段相关内容的补充,并非完整教程,有不清楚的地方可以交替阅读进行理解。 场景 沿用【界面设计器】左树右表中的两个场景。 我们可以做出这些优化: 将【商品类目】的【上级类目】组件改为【级联】组件。其第1级为【商品类目】,使用自关联依次展开。 将【部门】的【上级部门】组件改为【树下拉】组件。其第1级为【公司】,第2级为【部门】,【部门】使用自关联依次展开。 PS:本章不提供任何步骤介绍,请根据场景内容自行探索。 扩展知识 具备选择行为的组件 常用的选择组件可以进行一些基本的划分。 从可选数量来看 单选:只能选一个值。 多选:可以选择多个值。 从业务类型来看 枚举(Enum):通过数据字典提供可选项。 布尔(Boolean):可以看作一个特殊的枚举,其可选范围只有是和否。 一对一(O2O)和多对一(M2O):对一(X2O)类型仅支持单选,通过关联模型的数据源提供可选项。 一对多(O2M)以及多对多(M2M):对多(X2M)类型仅支持多选,通过关联模型的数据源提供可选项。 从交互形态来看 单选框(Radio) 多选框(Checkbox) 下拉选择(Select) 树下拉(TreeSelect) 级联(Cascader) 其中,树下拉(TreeSelect)和级联(Cascader)组件要求数据源可以构成树结构,因此通常使用这两个字段组件的都是关联关系字段。 下拉选择(Select) 在介绍树下拉/级联之前,我们有必要先了解一下在关联关系字段中使用下拉选择(Select)这一字段组件的表现情况。 根据关联关系字段对应的关联模型,我们可以获得其组件所需的可选项,在用户进行选中后,该组件将获得一个选项值,并且在表单提交、计算公式等被使用。 通常情况下,我们通过queryPage接口获取分页后的可选项列表,再通过点击/滚动方式获得其他页的可选项供用户选择。 树下拉(TreeSelect)/级联(Cascader) 与上述介绍的下拉选择(Select)不同点在于,其可选项是通过【联动关系】配置进行获取的,它并不要求直接获取到真正可以被选择的可选项,而是通过树结构依次展开的。用户可选择的可选项一定是与关联关系字段对应的关联模型相同的树节点。对于无法选择的节点,其主要作用在于将数据进行划分,以便于用户进行选择。 由于树节点具备特殊性,无法直接使用平台的任何一个模型。因此树结构被定义在UiTreeNode模型中,该模型是描述树结构的基本模型,其提供了多个接口为树结构的查询提供了基本能力。 通常情况下,在创建页面,我们通过UiTreeNode模型的fetchChildren接口依次获取其子节点。在编辑页面,我们通过fetchAll、reverselyQuery、reverselyQueryWithSize这三个接口获取回填的数据,根据不同情况进行调用。虽然使用来不同的接口,但最终都会使用当前模型的queryPage接口获取数据。

    2023年11月1日
    1.6K00
  • Oinone平台部署及依赖说明(v6.2)

    概述 名词解释 业务工程包:指平台提供的内置基础包和内置功能包。 设计器工程包:指模型设计器、界面设计器、流程设计器等相关依赖包。 父POM:仅声明依赖包版本的pom文件 启动工程POM:仅声明具体依赖包的pom文件,一般不用于指定版本。 业务工程部署 Oinone平台向合作伙伴提供前后端业务工程所需的全部依赖,依赖项的具体说明下面会分别介绍。 设计器部署 Oinone平台向合作伙伴提供了两种设计器部署方式: Docker镜像:支持amd64和arm64两种架构的操作系统。(推荐) JAR包:与Docker镜像中的内容完全一致。 使用JAR包直接启动需要使用Oinone专属启动器,Docker镜像已内置Oinone专属启动器。 PS:如遇到以上部署方式或提供的镜像无法满足部署需求时,请联系Oinone平台售后获取技术支持。 Docker镜像 体验镜像 包括所有设计器。 内置所有所需中间件,包括Mysql、Redis、Zookeeper、RocketMQ。 适用场景:用于快速体验Oinone平台全部功能 docker pull harbor.oinone.top/oinone/oinone-designer-full-v6.2:TAG 前后端一体部署镜像 包括所有设计器。 无内置中间件。 适用场景:用于便捷部署Oinone平台的前后端服务 docker pull harbor.oinone.top/oinone/oinone-designer-mini-v6.2:TAG 前后端一体部署镜像 – 流程设计器 仅包括流程设计器。 无内置中间件。 适用场景:用于便捷部署仅需流程设计器的Oinone平台的前后端服务。 docker pull harbor.oinone.top/oinone/workflow-designer-v6.2:TAG 后端部署镜像 用于前后端分别部署,包括所有设计器。 仅包含后端服务 无内置中间件 适用场景:Kubenetes部署;支持健康检查,前后端分离部署; docker pull harbor.oinone.top/oinone/designer-backend-v6.2:TAG 前端部署镜像 用于前后端分别部署,包括所有设计器。 仅包含前端服务 无内置中间件 适用场景:Kubenetes部署;支持健康检查,前后端分离部署; docker pull harbor.oinone.top/oinone/designer-frontend-v6.2:TAG 镜像拉取 以体验镜像为例,Oinone平台提供多种拉取镜像的方式。 # 获取混合架构镜像,支持amd64和arm64架构的操作系统 docker pull harbor.oinone.top/oinone/oinone-designer-full-v6.2:6.2.3.1 # 仅获取amd64架构镜像 docker pull harbor.oinone.top/oinone/oinone-designer-full-v6.2:6.2.3.1-amd64 # 仅获取arm64架构镜像 docker pull harbor.oinone.top/oinone/oinone-designer-full-v6.2:6.2.3.1-arm64 # 获取最新版镜像(每次拉取自动更新) docker pull harbor.oinone.top/oinone/oinone-designer-full-v6.2 PS:如镜像拉取过慢,可在确定操作系统架构的情况下获取amd64或arm64架构镜像。 JAR包获取 $VERSION:对应镜像版本号 包含所有设计器的后端JAR包下载路径示例 https://oinone-jar.oss-cn-zhangjiakou.aliyuncs.com/install/oinone-designer/pamirs-designer-boot-v6.2-$VERSION.jar https://oinone-jar.oss-cn-zhangjiakou.aliyuncs.com/install/oinone-designer/pamirs-designer-boot-v6.2-latest.jar 仅包含流程设计器的后端JAR包下载路径示例 https://oinone-jar.oss-cn-zhangjiakou.aliyuncs.com/install/workflow-designer/pamirs-workflow-designer-boot-v6.2-$VERSION.jar https://oinone-jar.oss-cn-zhangjiakou.aliyuncs.com/install/workflow-designer/pamirs-workflow-designer-boot-v6.2-latest.jar 前端静态 dist 获取 运行 dist 压缩包下载路径示例 https://oinone-jar.oss-cn-zhangjiakou.aliyuncs.com/install/oinone-designer-frontend/pamirs-designer-frontend-v6.2-$VERSION.tar.gz https://oinone-jar.oss-cn-zhangjiakou.aliyuncs.com/install/oinone-designer-frontend/pamirs-designer-frontend-v6.2-latest.tar.gz 解压缩命令 tar -zxvf pamirs-designer-frontend-v6.2-$VERSION.tar.gz 前端部署资源包下载 pamirs-designer-frontend-resources.zip 目录结构 在获取了前端 dist 压缩包以及部署资源包之后,按照如下所示的目录结构放置对应内容即可: . ├── config │ └── manifest.js ├── css ├── favicon.ico ├── fonts ├── index.html ├── js ├── lib │ └── luckysheet └── static 后端依赖 Oinone平台后端使用Maven管理工具对所有依赖包进行版本管理。 版本说明 下面是在每个版本升级说明中提供的所有依赖版本,最新版本请查看对应的最新升级说明文档。 版本更新日志 <!– 平台基础 –> <oinone-bom.version>6.2.11</oinone-bom.version> <!– 设计器 –> <pamirs.workflow.designer.version>6.2.2</pamirs.workflow.designer.version> <pamirs.model.designer.version>6.2.6</pamirs.model.designer.version> <pamirs.ui.designer.version>6.2.10</pamirs.ui.designer.version> <pamirs.print.designer.version>6.2.1</pamirs.print.designer.version> <pamirs.data.designer.version>6.2.4</pamirs.data.designer.version> <pamirs.dataflow.designer.version>6.2.1</pamirs.dataflow.designer.version> <pamirs.eip.designer.version>6.2.7</pamirs.eip.designer.version> <pamirs.microflow.designer.version>6.2.1</pamirs.microflow.designer.version> <pamirs.ai.designer.version>6.2.1</pamirs.ai.designer.version> <dependencyManagement> <dependencies> <dependency> <groupId>pro.shushi</groupId> <artifactId>oinone-bom</artifactId> <version>${oinone.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>pro.shushi.pamirs.designer</groupId> <artifactId>pamirs-model-designer-api</artifactId> <version>${pamirs.model.designer.version}</version> </dependency> <dependency> <groupId>pro.shushi.pamirs.designer</groupId> <artifactId>pamirs-ui-designer-api</artifactId> <version>${pamirs.ui.designer.version}</version> </dependency> <dependency> <groupId>pro.shushi.pamirs.dataflow</groupId> <artifactId>pamirs-dataflow-designer-api</artifactId> <version>${pamirs.dataflow.designer.version}</version> </dependency> <dependency> <groupId>pro.shushi.pamirs.designer</groupId> <artifactId>pamirs-eip-designer-api</artifactId> <version>${pamirs.eip.designer.version}</version> </dependency> </dependencies> </dependencyManagement> 完整功能依赖示例 以下列举了除了设计器相关依赖外的全部依赖管理项,其通常使用在启动工程POM中。…

    2025年6月20日
    59600

Leave a Reply

登录后才能评论