feat(file-management): 添加文件管理功能并支持环境配置
- 在 application.yml 和环境特定的配置文件中添加文件存储目录路径配置 - 新增 Stage 环境配置文件和相关设置 - 修改 WmsFileManagementController 以使用配置文件中的目录路径 - 优化文件管理相关 API 的错误处理和路径获取方式
This commit is contained in:
@@ -30,6 +30,12 @@ xxl.job:
|
||||
# 执行器日志文件保存天数:大于3生效
|
||||
logretentiondays: 30
|
||||
|
||||
--- # WMS文件管理配置
|
||||
klp:
|
||||
file:
|
||||
# 开发环境文件存储目录
|
||||
directory-path: testDirectory
|
||||
|
||||
--- # 数据源配置
|
||||
spring:
|
||||
datasource:
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
--- # 临时文件存储位置 避免临时文件被系统清理报错
|
||||
spring.servlet.multipart.location: /klp/server/temp
|
||||
|
||||
--- # WMS文件管理配置
|
||||
klp:
|
||||
file:
|
||||
# 生产环境文件存储目录
|
||||
directory-path: /home/ubuntu/oa/folder
|
||||
|
||||
--- # 监控中心配置
|
||||
spring.boot.admin.client:
|
||||
# 增加客户端开关
|
||||
|
||||
180
klp-admin/src/main/resources/application-stage.yml
Normal file
180
klp-admin/src/main/resources/application-stage.yml
Normal file
@@ -0,0 +1,180 @@
|
||||
--- # 临时文件存储位置 避免临时文件被系统清理报错
|
||||
spring.servlet.multipart.location: /klp/server/temp
|
||||
|
||||
--- # WMS文件管理配置
|
||||
klp:
|
||||
file:
|
||||
# 开发环境文件存储目录
|
||||
directory-path: testDirectory
|
||||
|
||||
--- # 监控中心配置
|
||||
spring.boot.admin.client:
|
||||
# 增加客户端开关
|
||||
enabled: true
|
||||
url: http://localhost:9090/admin
|
||||
instance:
|
||||
service-host-type: IP
|
||||
username: klp
|
||||
password: 123456
|
||||
|
||||
--- # xxl-job 配置
|
||||
xxl.job:
|
||||
# 执行器开关
|
||||
enabled: true
|
||||
# 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
|
||||
admin-addresses: http://localhost:9100/xxl-job-admin
|
||||
# 执行器通讯TOKEN:非空时启用
|
||||
access-token: xxl-job
|
||||
executor:
|
||||
# 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册
|
||||
appname: xxl-job-executor
|
||||
# 执行器端口号 执行器从9101开始往后写
|
||||
port: 9101
|
||||
# 执行器注册:默认IP:PORT
|
||||
address:
|
||||
# 执行器IP:默认自动获取IP
|
||||
ip:
|
||||
# 执行器运行日志文件存储磁盘路径
|
||||
logpath: ./logs/xxl-job
|
||||
# 执行器日志文件保存天数:大于3生效
|
||||
logretentiondays: 30
|
||||
|
||||
--- # 数据源配置
|
||||
spring:
|
||||
datasource:
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
# 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
|
||||
dynamic:
|
||||
# 性能分析插件(有性能损耗 不建议生产环境使用)
|
||||
p6spy: false
|
||||
# 设置默认的数据源或者数据源组,默认值即为 master
|
||||
primary: master
|
||||
# 严格模式 匹配不到数据源则报错
|
||||
strict: true
|
||||
datasource:
|
||||
# 主库数据源
|
||||
master:
|
||||
type: ${spring.datasource.type}
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
|
||||
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
|
||||
url: jdbc:mysql://140.143.206.120:3306/klp-oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
|
||||
username: klp
|
||||
password: KeLunPu123@
|
||||
# 从库数据源
|
||||
slave:
|
||||
lazy: true
|
||||
type: ${spring.datasource.type}
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
|
||||
username:
|
||||
password:
|
||||
# oracle:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: oracle.jdbc.OracleDriver
|
||||
# url: jdbc:oracle:thin:@//localhost:1521/XE
|
||||
# username: ROOT
|
||||
# password: root
|
||||
# hikari:
|
||||
# connectionTestQuery: SELECT 1 FROM DUAL
|
||||
# postgres:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: org.postgresql.Driver
|
||||
# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
|
||||
# username: root
|
||||
# password: root
|
||||
# sqlserver:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
|
||||
# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
|
||||
# username: SA
|
||||
# password: root
|
||||
hikari:
|
||||
# 最大连接池数量
|
||||
maxPoolSize: 20
|
||||
# 最小空闲线程数量
|
||||
minIdle: 10
|
||||
# 配置获取连接等待超时的时间
|
||||
connectionTimeout: 30000
|
||||
# 校验超时时间
|
||||
validationTimeout: 5000
|
||||
# 空闲连接存活最大时间,默认10分钟
|
||||
idleTimeout: 600000
|
||||
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
|
||||
maxLifetime: 1800000
|
||||
# 连接测试query(配置检测连接是否有效)
|
||||
connectionTestQuery: SELECT 1
|
||||
# 多久检查一次连接的活性
|
||||
keepaliveTime: 30000
|
||||
|
||||
--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
|
||||
spring:
|
||||
redis:
|
||||
# 地址
|
||||
host: 140.143.206.120
|
||||
# 端口,默认为6379
|
||||
port: 6379
|
||||
# 数据库索引
|
||||
database: 0
|
||||
# 密码(如没有密码请注释掉)
|
||||
password: KeLunPu123!
|
||||
# 连接超时时间
|
||||
timeout: 10s
|
||||
# 是否开启ssl
|
||||
ssl: false
|
||||
|
||||
redisson:
|
||||
# redis key前缀
|
||||
keyPrefix:
|
||||
# 线程池数量
|
||||
threads: 16
|
||||
# Netty线程池数量
|
||||
nettyThreads: 32
|
||||
# 单节点配置
|
||||
singleServerConfig:
|
||||
# 客户端名称
|
||||
clientName: ${klp.name}
|
||||
# 最小空闲连接数
|
||||
connectionMinimumIdleSize: 32
|
||||
# 连接池大小
|
||||
connectionPoolSize: 64
|
||||
# 连接空闲超时,单位:毫秒
|
||||
idleConnectionTimeout: 10000
|
||||
# 命令等待超时,单位:毫秒
|
||||
timeout: 3000
|
||||
# 发布和订阅连接池大小
|
||||
subscriptionConnectionPoolSize: 50
|
||||
|
||||
--- # mail 邮件发送
|
||||
mail:
|
||||
enabled: false
|
||||
host: smtp.163.com
|
||||
port: 465
|
||||
# 是否需要用户名密码验证
|
||||
auth: true
|
||||
# 发送方,遵循RFC-822标准
|
||||
from: xxx@163.com
|
||||
# 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
|
||||
user: xxx@163.com
|
||||
# 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
|
||||
pass: xxxxxxxxxx
|
||||
# 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
|
||||
starttlsEnable: true
|
||||
# 使用SSL安全连接
|
||||
sslEnable: true
|
||||
# SMTP超时时长,单位毫秒,缺省值不超时
|
||||
timeout: 0
|
||||
# Socket连接超时值,单位毫秒,缺省值不超时
|
||||
connectionTimeout: 0
|
||||
|
||||
--- # sms 短信
|
||||
sms:
|
||||
enabled: false
|
||||
# 阿里云 dysmsapi.aliyuncs.com
|
||||
# 腾讯云 sms.tencentcloudapi.com
|
||||
endpoint: "dysmsapi.aliyuncs.com"
|
||||
accessKeyId: xxxxxxx
|
||||
accessKeySecret: xxxxxx
|
||||
signName: 测试
|
||||
# 腾讯专用
|
||||
sdkAppId:
|
||||
@@ -12,6 +12,10 @@ klp:
|
||||
addressEnabled: true
|
||||
# 缓存懒加载
|
||||
cacheLazy: false
|
||||
# 文件管理配置
|
||||
file:
|
||||
# 文件存储目录路径
|
||||
directory-path: ${klp.file.directory-path:testDirectory}
|
||||
|
||||
captcha:
|
||||
# 页面 <参数设置> 可开启关闭 验证码校验
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.klp.controller;
|
||||
import com.klp.domain.FileDetailInfo;
|
||||
import com.klp.domain.FileInfo;
|
||||
import com.klp.domain.vo.ApiResponseVo;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Controller;
|
||||
@@ -24,8 +25,9 @@ import java.util.stream.Collectors;
|
||||
@RequestMapping("/wms/file")
|
||||
public class WmsFileManagementController {
|
||||
|
||||
// 文件目录路径
|
||||
private static final String DIRECTORY_PATH = "testDirectory";
|
||||
// 文件目录路径 - 从配置文件读取
|
||||
@Value("${klp.file.directory-path}")
|
||||
private String directoryPath;
|
||||
|
||||
/**
|
||||
* 获取目录下所有文件基本信息(不包含文件内容)
|
||||
@@ -35,11 +37,11 @@ public class WmsFileManagementController {
|
||||
@ResponseBody
|
||||
public ResponseEntity<ApiResponseVo<List<FileInfo>>> getAllFiles() {
|
||||
try {
|
||||
Path directory = Paths.get(DIRECTORY_PATH);
|
||||
Path directory = Paths.get(directoryPath);
|
||||
|
||||
// 检查目录是否存在
|
||||
if (!Files.exists(directory)) {
|
||||
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + DIRECTORY_PATH, null));
|
||||
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + directoryPath, null));
|
||||
}
|
||||
|
||||
// 获取所有文件基本信息(不读取文件内容)
|
||||
@@ -73,7 +75,7 @@ public class WmsFileManagementController {
|
||||
@ResponseBody
|
||||
public ResponseEntity<ApiResponseVo<FileDetailInfo>> getFileContent(@PathVariable String fileName) {
|
||||
try {
|
||||
Path filePath = Paths.get(DIRECTORY_PATH, fileName);
|
||||
Path filePath = Paths.get(directoryPath, fileName);
|
||||
|
||||
// 检查文件是否存在
|
||||
if (!Files.exists(filePath)) {
|
||||
@@ -108,7 +110,7 @@ public class WmsFileManagementController {
|
||||
@ResponseBody
|
||||
public ResponseEntity<ApiResponseVo<String>> deleteFile(@PathVariable String fileName) {
|
||||
try {
|
||||
Path filePath = Paths.get(DIRECTORY_PATH, fileName);
|
||||
Path filePath = Paths.get(directoryPath, fileName);
|
||||
|
||||
// 检查文件是否存在
|
||||
if (!Files.exists(filePath)) {
|
||||
@@ -149,7 +151,7 @@ public class WmsFileManagementController {
|
||||
|
||||
for (String fileName : fileNames) {
|
||||
try {
|
||||
Path filePath = Paths.get(DIRECTORY_PATH, fileName);
|
||||
Path filePath = Paths.get(directoryPath, fileName);
|
||||
|
||||
if (Files.exists(filePath) && Files.isRegularFile(filePath)) {
|
||||
Files.delete(filePath);
|
||||
@@ -220,10 +222,10 @@ public class WmsFileManagementController {
|
||||
*/
|
||||
private ResponseEntity<ApiResponseVo<Map<String, Object>>> performCleanup() {
|
||||
try {
|
||||
Path directory = Paths.get(DIRECTORY_PATH);
|
||||
Path directory = Paths.get(directoryPath);
|
||||
|
||||
if (!Files.exists(directory)) {
|
||||
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + DIRECTORY_PATH, null));
|
||||
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + directoryPath, null));
|
||||
}
|
||||
|
||||
// 计算时间范围:删除1-3个月前的文件
|
||||
@@ -333,10 +335,10 @@ public class WmsFileManagementController {
|
||||
@ResponseBody
|
||||
public ResponseEntity<ApiResponseVo<Map<String, Object>>> getDirectoryStats() {
|
||||
try {
|
||||
Path directory = Paths.get(DIRECTORY_PATH);
|
||||
Path directory = Paths.get(directoryPath);
|
||||
|
||||
if (!Files.exists(directory)) {
|
||||
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + DIRECTORY_PATH, null));
|
||||
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + directoryPath, null));
|
||||
}
|
||||
|
||||
Map<String, Object> stats = new HashMap<>();
|
||||
@@ -354,7 +356,7 @@ public class WmsFileManagementController {
|
||||
}
|
||||
}
|
||||
|
||||
stats.put("directoryPath", DIRECTORY_PATH);
|
||||
stats.put("directoryPath", directoryPath);
|
||||
stats.put("fileCount", fileCount);
|
||||
stats.put("totalSize", totalSize);
|
||||
stats.put("totalSizeMB", String.format("%.2f MB", totalSize / (1024.0 * 1024.0)));
|
||||
|
||||
Reference in New Issue
Block a user