From bc7678e6d564b9696fbd1eddebf1584522ad7440 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Mon, 13 Oct 2025 11:08:47 +0800
Subject: [PATCH] minio集成到公共模块

---
 ard-common/src/main/java/com/ard/common/config/OssConfiguration.java                         |  129 ++++++++++++
 ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineFileServiceImpl.java     |    2 
 ard-admin/src/main/java/com/ard/web/controller/common/CommonController.java                  |   58 +++++
 ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AliyunOssServiceImpl.java |    2 
 ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceFirmwareServiceImpl.java   |    2 
 ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssAspectHandler.java     |    2 
 ard-work/src/main/java/com/ard/work/service/impl/KmzFileServiceImpl.java                     |   13 
 ard-common/src/main/java/com/ard/common/utils/file/MinioUtil.java                            |   15 
 ard-admin/src/main/resources/application.yml                                                 |    5 
 ard-common/pom.xml                                                                           |   11 +
 ard-common/src/main/java/com/ard/common/utils/file/FileUploadUtils.java                      |  180 ++++++++++-------
 ard-sample/src/main/java/com/ard/sample/manage/service/impl/LogsFileServiceImpl.java         |    2 
 ard-admin/src/main/java/com/ard/web/core/config/SwaggerConfig.java                           |   20 +
 ard-work/pom.xml                                                                             |    6 
 /dev/null                                                                                    |   44 ----
 ard-common/src/main/java/com/ard/common/core/domain/entity/MinioUploadResult.java            |   28 ++
 ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/MinIOServiceImpl.java     |    2 
 ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AmazonS3ServiceImpl.java  |    2 
 ard-sample/src/main/java/com/ard/sample/storage/service/impl/StorageServiceImpl.java         |    2 
 ard-common/src/main/java/com/ard/common/utils/file/MimeTypeUtils.java                        |    4 
 ard-work/src/main/java/com/ard/work/component/netty/handler/ClientHandler.java               |    2 
 ard-sample/src/main/java/com/ard/sample/media/service/impl/FileServiceImpl.java              |    2 
 ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssServiceContext.java    |    2 
 ard-admin/src/main/resources/application-prod.yml                                            |   11 
 24 files changed, 377 insertions(+), 169 deletions(-)

diff --git a/ard-admin/src/main/java/com/ard/web/controller/common/CommonController.java b/ard-admin/src/main/java/com/ard/web/controller/common/CommonController.java
index 0b38fdd..d8fd6fe 100644
--- a/ard-admin/src/main/java/com/ard/web/controller/common/CommonController.java
+++ b/ard-admin/src/main/java/com/ard/web/controller/common/CommonController.java
@@ -4,14 +4,16 @@
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ard.common.core.domain.entity.MinioUploadResult;
+import com.ard.work.domain.entity.MinioSysFile;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import com.ard.common.config.UavConfig;
 import com.ard.common.constant.Constants;
@@ -21,11 +23,14 @@
 import com.ard.common.utils.file.FileUtils;
 import com.ard.framework.config.ServerConfig;
 
+import static com.ard.common.utils.file.MinioUtil.uploadFile;
+
 /**
  * 通用请求处理
  * 
  * @author ruoyi
  */
+@Api(tags = "通用请求处理")
 @RestController
 @RequestMapping("/common")
 public class CommonController
@@ -160,4 +165,49 @@
             log.error("下载文件失败", e);
         }
     }
+
+
+    /**
+     * minio上传文件
+     */
+    @ApiOperation("minio文件上传")
+    @PostMapping("/uploadMinio")
+    public AjaxResult uploadFileMinio(@RequestPart MultipartFile file) {
+        try
+        {
+            // 上传并返回新文件名称
+            String url = FileUploadUtils.uploadMinio(file);
+            MinioUploadResult minioUploadResult =  MinioUploadResult.builder()
+                    .url(url)
+                    .newFileName(FileUtils.getName(url))
+                    .originalFilename(file.getOriginalFilename())
+                    .build();
+            return AjaxResult.success(minioUploadResult);
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+    /**
+     * minio文件上传-指定桶
+     */
+    @ApiOperation("minio文件上传-指定桶")
+    @PostMapping("/uploadMinio/{bucketName}")
+    public AjaxResult upload(@RequestPart("file")MultipartFile file,
+                               @PathVariable String bucketName) {
+        try {
+            // 上传并返回访问地址
+            String url = FileUploadUtils.uploadMinio(file,bucketName);
+            MinioUploadResult minioUploadResult =  MinioUploadResult.builder()
+                    .url(url)
+                    .newFileName(FileUtils.getName(url))
+                    .originalFilename(file.getOriginalFilename())
+                    .build();
+            return AjaxResult.success(minioUploadResult);
+        } catch (Exception e) {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
 }
diff --git a/ard-admin/src/main/java/com/ard/web/controller/data/MinioFileController.java b/ard-admin/src/main/java/com/ard/web/controller/data/MinioFileController.java
deleted file mode 100644
index 4671d0d..0000000
--- a/ard-admin/src/main/java/com/ard/web/controller/data/MinioFileController.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.ard.web.controller.data;
-
-import com.ard.common.utils.file.FileUtils;
-import com.ard.work.domain.entity.MinioSysFile;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import static com.ard.work.component.minio.utils.MinioUtil.uploadFile;
-
-/**
- * 文件请求处理
- *
- * @author ard
- */
-@Api(tags = "MinIo文件上传")
-@RestController
-@RequestMapping("/minoFile")
-public class MinioFileController {
-    private static final Logger log = LoggerFactory.getLogger(MinioFileController.class);
-
-    /**
-     * 文件上传-指定桶名称
-     */
-    @ApiOperation("文件上传-指定桶名称")
-    @PostMapping("upload/{bucketName}/{fileName}")
-    public MinioSysFile upload(@RequestPart("file")MultipartFile file,
-                               @PathVariable String bucketName,
-                               @PathVariable String fileName) {
-        try {
-            // 上传并返回访问地址
-            String url = uploadFile(bucketName,fileName,file);
-            MinioSysFile minioSysFile = new MinioSysFile();
-            minioSysFile.setName(FileUtils.getName(url));
-            minioSysFile.setUrl(url);
-            return minioSysFile;
-        } catch (Exception e) {
-            log.error("上传文件失败", e);
-            //return R.fail(e.getMessage());
-            return null;
-        }
-    }
-
-}
diff --git a/ard-admin/src/main/java/com/ard/web/core/config/SwaggerConfig.java b/ard-admin/src/main/java/com/ard/web/core/config/SwaggerConfig.java
index 9066a3c..ec9e1f9 100644
--- a/ard-admin/src/main/java/com/ard/web/core/config/SwaggerConfig.java
+++ b/ard-admin/src/main/java/com/ard/web/core/config/SwaggerConfig.java
@@ -148,7 +148,25 @@
                 .securitySchemes(securitySchemes())
                 .securityContexts(securityContexts());
     }
-
+    @Bean
+    public Docket commonApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .enable(true)
+                .groupName("公共请求接口")   // 分组名
+                .apiInfo(apiInfo("公共请求管理接口"))
+                .select()
+                // 扫描指定包下,但只扫描加了 @ApiOperation 注解的方法
+                .apis(requestHandler ->
+                        requestHandler.declaringClass().getPackage().getName().startsWith("com.ard.web.controller" +
+                                ".common") &&
+                                requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
+                )
+                .paths(PathSelectors.any())
+                .build()
+                /* 设置安全模式,swagger可以设置访问token */
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+    }
     /**
      * 安全模式,这里指定token通过Authorization头请求头传递
      */
diff --git a/ard-admin/src/main/resources/application-prod.yml b/ard-admin/src/main/resources/application-prod.yml
index 24a7827..73cc8d8 100644
--- a/ard-admin/src/main/resources/application-prod.yml
+++ b/ard-admin/src/main/resources/application-prod.yml
@@ -2,10 +2,12 @@
 server:
   # 服务器的HTTP端口,默认为8080
   port: 8080
+
 # token配置
 token:
   # 是否允许账户多终端同时登录(true允许 false不允许)
   soloLogin: true
+
 # 日志配置
 logging:
   level:
@@ -23,14 +25,6 @@
     enable: false
     username: admin
     password: ardkj12345
-# MyBatis Plus配置
-mybatis-plus:
-  # 搜索指定包别名
-  typeAliasesPackage: com.ard.**.domain
-  # 配置mapper的扫描,找到所有的mapper.xml映射文件
-  mapperLocations: classpath*:mapper/**/*Mapper.xml
-  # 加载全局的配置文件
-  configLocation: classpath:mybatis/mybatis-config.xml
 
 # 地图资源配置
 geoserver:
@@ -64,6 +58,7 @@
     license: khjd7FzUTzJgaArNv97XdA2nKQtYfESOvBHLqjC6MpvPqxCfuQ82nOlTgzoiLp7UoZujARopN2A1ctPFaJ8oHiHQrn3IRV4wqN3hdSM40xXj02YVvTWQBT54WS8Ks+E8Zatp3gk2T0+7cM5a5a3mWzxLMv7CNqw2z9pFBoOBdpY=
     host: 192.168.1.15
     port: 123
+
 #流媒体
 mediamtx:
   apiHost: 192.168.1.3
diff --git a/ard-admin/src/main/resources/application.yml b/ard-admin/src/main/resources/application.yml
index d55c1bd..cd292d3 100644
--- a/ard-admin/src/main/resources/application.yml
+++ b/ard-admin/src/main/resources/application.yml
@@ -6,8 +6,8 @@
   version: 3.8.8
   # 版权年份
   copyrightYear: 2024
-  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: D:/ruoyi/uploadPath
+  # 文件路径 示例( Windows配置D:/ard/uploadPath,Linux配置 /home/ard/uploadPath)
+  profile: /home/ard/uploadPath
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数字计算 char 字符验证
@@ -148,7 +148,6 @@
         max-active: 8
         # #连接池最大阻塞等待时间(使用负值表示没有限制)
         max-wait: -1ms
-
   #健康监控
   boot:
     admin:
diff --git a/ard-common/pom.xml b/ard-common/pom.xml
index d02e140..cdf374a 100644
--- a/ard-common/pom.xml
+++ b/ard-common/pom.xml
@@ -125,6 +125,17 @@
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>3.5.1</version>
         </dependency>
+
+        <!-- Minio 文件存储 -->
+        <dependency>
+            <groupId>io.minio</groupId>
+            <artifactId>minio</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/ard-common/src/main/java/com/ard/common/config/OssConfiguration.java b/ard-common/src/main/java/com/ard/common/config/OssConfiguration.java
new file mode 100644
index 0000000..7e62abc
--- /dev/null
+++ b/ard-common/src/main/java/com/ard/common/config/OssConfiguration.java
@@ -0,0 +1,129 @@
+package com.ard.common.config;
+
+import io.minio.MinioClient;
+import okhttp3.OkHttpClient;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+
+/**
+ * @author sean
+ * @version 0.2
+ * @date 2021/12/9
+ */
+@Component
+@ConfigurationProperties(prefix = "oss")
+public class OssConfiguration {
+
+    /**
+     * @see com.ard.sample.component.oss.model.enums.OssTypeEnum
+     */
+    public static String provider;
+
+    /**
+     * Whether to use the object storage service.
+     */
+    public static boolean enable;
+
+    /**
+     * The protocol needs to be included at the beginning of the address.
+     */
+    public static String endpoint;
+
+    public static String accessKey;
+
+    public static String secretKey;
+
+    public static String region;
+
+    public static Long expire;
+
+    public static String roleSessionName;
+
+    public static String roleArn;
+
+    public static String bucket;
+
+    public static String objectDirPrefix;
+
+    public void setProvider(String provider) {
+        OssConfiguration.provider = provider;
+    }
+
+    public void setEnable(boolean enable) {
+        OssConfiguration.enable = enable;
+    }
+
+    public void setEndpoint(String endpoint) {
+        OssConfiguration.endpoint = endpoint;
+    }
+
+    public void setAccessKey(String accessKey) {
+        OssConfiguration.accessKey = accessKey;
+    }
+
+    public void setSecretKey(String secretKey) {
+        OssConfiguration.secretKey = secretKey;
+    }
+
+    public void setRegion(String region) {
+        OssConfiguration.region = region;
+    }
+
+    public void setExpire(Long expire) {
+        OssConfiguration.expire = expire;
+    }
+
+    public void setRoleSessionName(String roleSessionName) {
+        OssConfiguration.roleSessionName = roleSessionName;
+    }
+
+    public void setRoleArn(String roleArn) {
+        OssConfiguration.roleArn = roleArn;
+    }
+
+    public void setBucket(String bucket) {
+        OssConfiguration.bucket = bucket;
+    }
+
+    public void setObjectDirPrefix(String objectDirPrefix) {
+        OssConfiguration.objectDirPrefix = objectDirPrefix;
+    }
+
+
+    @Bean
+    public MinioClient getMinioClient() throws KeyManagementException, NoSuchAlgorithmException {// 忽略 SSL 证书校验(仅开发环境)
+        // 忽略 SSL 验证
+        TrustManager[] trustAllCerts = new TrustManager[]{
+                new X509TrustManager() {
+                    @Override public void checkClientTrusted(X509Certificate[] chain, String authType) {}
+                    @Override public void checkServerTrusted(X509Certificate[] chain, String authType) {}
+                    @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
+                }
+        };
+
+        SSLContext sslContext = SSLContext.getInstance("TLS");
+        sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager)trustAllCerts[0])
+                .hostnameVerifier((hostname, session) -> true)
+                .build();
+
+        return MinioClient.builder()
+                .endpoint(endpoint)
+                .credentials(accessKey, secretKey)
+                .httpClient(okHttpClient)
+                .build();
+    }
+}
+
+
+
diff --git a/ard-common/src/main/java/com/ard/common/core/domain/entity/MinioUploadResult.java b/ard-common/src/main/java/com/ard/common/core/domain/entity/MinioUploadResult.java
new file mode 100644
index 0000000..a21a958
--- /dev/null
+++ b/ard-common/src/main/java/com/ard/common/core/domain/entity/MinioUploadResult.java
@@ -0,0 +1,28 @@
+package com.ard.common.core.domain.entity;
+
+import com.ard.common.annotation.DataScope;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * Description: Minio上传结果
+ * Author: lsy
+ * Date: 2025年10月13日10:42
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class MinioUploadResult {
+
+    /** 新文件名(上传后保存名) */
+    private String newFileName;
+
+    /** 文件完整访问 URL */
+    private String url;
+
+    /** 上传前原始文件名 */
+    private String originalFilename;
+}
diff --git a/ard-common/src/main/java/com/ard/common/utils/file/FileUploadUtils.java b/ard-common/src/main/java/com/ard/common/utils/file/FileUploadUtils.java
index f5b7234..1a0727d 100644
--- a/ard-common/src/main/java/com/ard/common/utils/file/FileUploadUtils.java
+++ b/ard-common/src/main/java/com/ard/common/utils/file/FileUploadUtils.java
@@ -4,8 +4,8 @@
 import java.io.IOException;
 import java.nio.file.Paths;
 import java.util.Objects;
-import org.apache.commons.io.FilenameUtils;
-import org.springframework.web.multipart.MultipartFile;
+
+import com.ard.common.config.OssConfiguration;
 import com.ard.common.config.UavConfig;
 import com.ard.common.constant.Constants;
 import com.ard.common.exception.file.FileNameLengthLimitExceededException;
@@ -14,18 +14,19 @@
 import com.ard.common.utils.DateUtils;
 import com.ard.common.utils.StringUtils;
 import com.ard.common.utils.uuid.Seq;
+import org.apache.commons.io.FilenameUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 文件上传工具类
  *
  * @author ruoyi
  */
-public class FileUploadUtils
-{
+public class FileUploadUtils {
     /**
      * 默认大小 50M
      */
-    public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024L;
+    public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
 
     /**
      * 默认的文件名最大长度 100
@@ -33,18 +34,25 @@
     public static final int DEFAULT_FILE_NAME_LENGTH = 100;
 
     /**
-     * 默认上传的地址
+     * 本地默认上传的地址
      */
     private static String defaultBaseDir = UavConfig.getProfile();
 
-    public static void setDefaultBaseDir(String defaultBaseDir)
-    {
+    /**
+     * Minio默认上传的地址
+     */
+    private static String bucketName = OssConfiguration.bucket;
+
+    public static void setDefaultBaseDir(String defaultBaseDir) {
         FileUploadUtils.defaultBaseDir = defaultBaseDir;
     }
 
-    public static String getDefaultBaseDir()
-    {
+    public static String getDefaultBaseDir() {
         return defaultBaseDir;
+    }
+
+    public static String getBucketName() {
+        return bucketName;
     }
 
     /**
@@ -54,14 +62,10 @@
      * @return 文件名称
      * @throws Exception
      */
-    public static final String upload(MultipartFile file) throws IOException
-    {
-        try
-        {
+    public static final String upload(MultipartFile file) throws IOException {
+        try {
             return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             throw new IOException(e.getMessage(), e);
         }
     }
@@ -70,18 +74,14 @@
      * 根据文件路径上传
      *
      * @param baseDir 相对应用的基目录
-     * @param file 上传的文件
+     * @param file    上传的文件
      * @return 文件名称
      * @throws IOException
      */
-    public static final String upload(String baseDir, MultipartFile file) throws IOException
-    {
-        try
-        {
+    public static final String upload(String baseDir, MultipartFile file) throws IOException {
+        try {
             return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             throw new IOException(e.getMessage(), e);
         }
     }
@@ -89,22 +89,20 @@
     /**
      * 文件上传
      *
-     * @param baseDir 相对应用的基目录
-     * @param file 上传的文件
+     * @param baseDir          相对应用的基目录
+     * @param file             上传的文件
      * @param allowedExtension 上传文件类型
      * @return 返回上传成功的文件名
-     * @throws FileSizeLimitExceededException 如果超出最大大小
+     * @throws FileSizeLimitExceededException       如果超出最大大小
      * @throws FileNameLengthLimitExceededException 文件名太长
-     * @throws IOException 比如读写文件出错时
-     * @throws InvalidExtensionException 文件校验异常
+     * @throws IOException                          比如读写文件出错时
+     * @throws InvalidExtensionException            文件校验异常
      */
     public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
             throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
-            InvalidExtensionException
-    {
+            InvalidExtensionException {
         int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length();
-        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
-        {
+        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
             throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
         }
 
@@ -118,30 +116,73 @@
     }
 
     /**
-     * 编码文件名
+     * 以默认BucketName配置上传到Minio服务器
+     *
+     * @param file 上传的文件
+     * @return 文件名称
+     * @throws Exception
      */
-    public static final String extractFilename(MultipartFile file)
-    {
-        return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(),
-                FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file));
+    public static final String uploadMinio(MultipartFile file) throws IOException {
+        try {
+            return uploadMinino(getBucketName(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
+        } catch (Exception e) {
+            throw new IOException(e.getMessage(), e);
+        }
     }
 
-    public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException
-    {
+    /**
+     * 自定义bucketName配置上传到Minio服务器
+     *
+     * @param file 上传的文件
+     * @return 文件名称
+     * @throws Exception
+     */
+    public static final String uploadMinio(MultipartFile file, String bucketName) throws IOException {
+        try {
+            return uploadMinino(bucketName, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
+        } catch (Exception e) {
+            throw new IOException(e.getMessage(), e);
+        }
+    }
+
+    private static String uploadMinino(String bucketName, MultipartFile file, String[] allowedExtension)
+            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
+            InvalidExtensionException {
+        int fileNamelength = file.getOriginalFilename().length();
+        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
+            throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
+        }
+        assertAllowed(file, allowedExtension);
+        try {
+            String fileName = extractFilename(file);
+            String pathFileName = MinioUtil.uploadFile(bucketName, fileName, file);
+            return pathFileName;
+        } catch (Exception e) {
+            throw new IOException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 编码文件名
+     */
+    public static final String extractFilename(MultipartFile file) {
+        return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(),
+                FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType),
+                getExtension(file));
+    }
+
+    public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
         File desc = new File(uploadDir + File.separator + fileName);
 
-        if (!desc.exists())
-        {
-            if (!desc.getParentFile().exists())
-            {
+        if (!desc.exists()) {
+            if (!desc.getParentFile().exists()) {
                 desc.getParentFile().mkdirs();
             }
         }
         return desc;
     }
 
-    public static final String getPathFileName(String uploadDir, String fileName) throws IOException
-    {
+    public static final String getPathFileName(String uploadDir, String fileName) throws IOException {
         int dirLastIndex = UavConfig.getProfile().length() + 1;
         String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
         return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
@@ -156,40 +197,28 @@
      * @throws InvalidExtensionException
      */
     public static final void assertAllowed(MultipartFile file, String[] allowedExtension)
-            throws FileSizeLimitExceededException, InvalidExtensionException
-    {
+            throws FileSizeLimitExceededException, InvalidExtensionException {
         long size = file.getSize();
-        if (size > DEFAULT_MAX_SIZE)
-        {
+        if (size > DEFAULT_MAX_SIZE) {
             throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
         }
 
         String fileName = file.getOriginalFilename();
         String extension = getExtension(file);
-        if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension))
-        {
-            if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION)
-            {
+        if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) {
+            if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) {
                 throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,
                         fileName);
-            }
-            else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION)
-            {
+            } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) {
                 throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,
                         fileName);
-            }
-            else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION)
-            {
+            } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) {
                 throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
                         fileName);
-            }
-            else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION)
-            {
+            } else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) {
                 throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,
                         fileName);
-            }
-            else
-            {
+            } else {
                 throw new InvalidExtensionException(allowedExtension, extension, fileName);
             }
         }
@@ -202,12 +231,9 @@
      * @param allowedExtension
      * @return
      */
-    public static final boolean isAllowedExtension(String extension, String[] allowedExtension)
-    {
-        for (String str : allowedExtension)
-        {
-            if (str.equalsIgnoreCase(extension))
-            {
+    public static final boolean isAllowedExtension(String extension, String[] allowedExtension) {
+        for (String str : allowedExtension) {
+            if (str.equalsIgnoreCase(extension)) {
                 return true;
             }
         }
@@ -220,13 +246,11 @@
      * @param file 表单文件
      * @return 后缀名
      */
-    public static final String getExtension(MultipartFile file)
-    {
+    public static final String getExtension(MultipartFile file) {
         String extension = FilenameUtils.getExtension(file.getOriginalFilename());
-        if (StringUtils.isEmpty(extension))
-        {
+        if (StringUtils.isEmpty(extension)) {
             extension = MimeTypeUtils.getExtension(Objects.requireNonNull(file.getContentType()));
         }
         return extension;
     }
-}
+}
\ No newline at end of file
diff --git a/ard-common/src/main/java/com/ard/common/utils/file/MimeTypeUtils.java b/ard-common/src/main/java/com/ard/common/utils/file/MimeTypeUtils.java
index 9e65285..7445f51 100644
--- a/ard-common/src/main/java/com/ard/common/utils/file/MimeTypeUtils.java
+++ b/ard-common/src/main/java/com/ard/common/utils/file/MimeTypeUtils.java
@@ -36,7 +36,9 @@
             // 视频格式
             "mp4", "avi", "rmvb",
             // pdf
-            "pdf" };
+            "pdf",
+            // kmz
+            "kmz"};
 
     public static String getExtension(String prefix)
     {
diff --git a/ard-work/src/main/java/com/ard/work/component/minio/utils/MinioUtil.java b/ard-common/src/main/java/com/ard/common/utils/file/MinioUtil.java
similarity index 97%
rename from ard-work/src/main/java/com/ard/work/component/minio/utils/MinioUtil.java
rename to ard-common/src/main/java/com/ard/common/utils/file/MinioUtil.java
index 35744eb..9c2aa55 100644
--- a/ard-work/src/main/java/com/ard/work/component/minio/utils/MinioUtil.java
+++ b/ard-common/src/main/java/com/ard/common/utils/file/MinioUtil.java
@@ -1,22 +1,26 @@
-package com.ard.work.component.minio.utils;
+package com.ard.common.utils.file;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-
 import com.ard.common.utils.ServletUtils;
 import com.ard.common.utils.spring.SpringUtils;
-import io.minio.*;
+import io.minio.SetBucketPolicyArgs;
 import org.springframework.web.multipart.MultipartFile;
+import io.minio.GetPresignedObjectUrlArgs;
+import io.minio.MinioClient;
+import io.minio.PutObjectArgs;
 import io.minio.http.Method;
 
 /**
  * Minio 文件存储工具类
- *
+ * 
  * @author ruoyi
  */
-public class MinioUtil {
+public class MinioUtil
+{
+
     /**
      * 判断桶是否存在
      *
@@ -214,5 +218,4 @@
             throw new IOException(e.getMessage(), e);
         }
     }
-
 }
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/model/OssConfiguration.java b/ard-sample/src/main/java/com/ard/sample/component/oss/model/OssConfiguration.java
deleted file mode 100644
index 72a047b..0000000
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/model/OssConfiguration.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.ard.sample.component.oss.model;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * @author sean
- * @version 0.2
- * @date 2021/12/9
- */
-@ConfigurationProperties(prefix = "oss")
-@Component
-public class OssConfiguration {
-
-    /**
-     * @see com.ard.sample.component.oss.model.enums.OssTypeEnum
-     */
-    public static String provider;
-
-    /**
-     * Whether to use the object storage service.
-     */
-    public static boolean enable;
-
-    /**
-     * The protocol needs to be included at the beginning of the address.
-     */
-    public static String endpoint;
-
-    public static String accessKey;
-
-    public static String secretKey;
-
-    public static String region;
-
-    public static Long expire;
-
-    public static String roleSessionName;
-
-    public static String roleArn;
-
-    public static String bucket;
-
-    public static String objectDirPrefix;
-
-    public void setProvider(String provider) {
-        OssConfiguration.provider = provider;
-    }
-
-    public void setEnable(boolean enable) {
-        OssConfiguration.enable = enable;
-    }
-
-    public void setEndpoint(String endpoint) {
-        OssConfiguration.endpoint = endpoint;
-    }
-
-    public void setAccessKey(String accessKey) {
-        OssConfiguration.accessKey = accessKey;
-    }
-
-    public void setSecretKey(String secretKey) {
-        OssConfiguration.secretKey = secretKey;
-    }
-
-    public void setRegion(String region) {
-        OssConfiguration.region = region;
-    }
-
-    public void setExpire(Long expire) {
-        OssConfiguration.expire = expire;
-    }
-
-    public void setRoleSessionName(String roleSessionName) {
-        OssConfiguration.roleSessionName = roleSessionName;
-    }
-
-    public void setRoleArn(String roleArn) {
-        OssConfiguration.roleArn = roleArn;
-    }
-
-    public void setBucket(String bucket) {
-        OssConfiguration.bucket = bucket;
-    }
-
-    public void setObjectDirPrefix(String objectDirPrefix) {
-        OssConfiguration.objectDirPrefix = objectDirPrefix;
-    }
-}
-
-
-
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AliyunOssServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AliyunOssServiceImpl.java
index f6e2d14..1c52b51 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AliyunOssServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AliyunOssServiceImpl.java
@@ -12,7 +12,7 @@
 import com.aliyuncs.profile.DefaultProfile;
 import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
 import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.oss.model.enums.OssTypeEnum;
 import com.ard.sample.component.oss.service.IOssService;
 import com.ard.sample.media.model.CredentialsDTO;
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AmazonS3ServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AmazonS3ServiceImpl.java
index 4e587d1..c68d201 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AmazonS3ServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AmazonS3ServiceImpl.java
@@ -12,7 +12,7 @@
 import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
 import com.amazonaws.services.securitytoken.model.Credentials;
 import com.ard.sample.component.AuthInterceptor;
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.oss.model.enums.OssTypeEnum;
 import com.ard.sample.component.oss.service.IOssService;
 import com.ard.sample.media.model.CredentialsDTO;
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/MinIOServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/MinIOServiceImpl.java
index ca85fb6..901ef70 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/MinIOServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/MinIOServiceImpl.java
@@ -1,6 +1,6 @@
 package com.ard.sample.component.oss.service.impl;
 
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.oss.model.enums.OssTypeEnum;
 import com.ard.sample.component.oss.service.IOssService;
 import com.ard.sample.media.model.CredentialsDTO;
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssAspectHandler.java b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssAspectHandler.java
index 2a47422..44afd4b 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssAspectHandler.java
+++ b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssAspectHandler.java
@@ -1,6 +1,6 @@
 package com.ard.sample.component.oss.service.impl;
 
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssServiceContext.java b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssServiceContext.java
index 785b8a0..ecc6fd6 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssServiceContext.java
+++ b/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssServiceContext.java
@@ -1,6 +1,6 @@
 package com.ard.sample.component.oss.service.impl;
 
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.oss.model.enums.OssTypeEnum;
 import com.ard.sample.component.oss.service.IOssService;
 import com.ard.sample.media.model.CredentialsDTO;
diff --git a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceFirmwareServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceFirmwareServiceImpl.java
index 6af1dc1..189c3fb 100644
--- a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceFirmwareServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceFirmwareServiceImpl.java
@@ -8,7 +8,7 @@
 import com.ard.sample.common.model.ResponseResult;
 import com.ard.sample.component.mqtt.model.*;
 import com.ard.sample.component.mqtt.service.impl.MessageSenderServiceImpl;
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.oss.service.impl.OssServiceContext;
 import com.ard.common.core.redis.RedisConst;
 import com.ard.common.core.redis.RedisOpsUtils;
diff --git a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/LogsFileServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/LogsFileServiceImpl.java
index a857608..54afa8d 100644
--- a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/LogsFileServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/LogsFileServiceImpl.java
@@ -3,7 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.ard.sample.component.mqtt.model.EventsResultStatusEnum;
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.oss.service.impl.OssServiceContext;
 import com.ard.sample.manage.mapper.ILogsFileMapper;
 import com.ard.sample.manage.model.dto.LogsFileDTO;
diff --git a/ard-sample/src/main/java/com/ard/sample/media/service/impl/FileServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/media/service/impl/FileServiceImpl.java
index 82b538e..d884feb 100644
--- a/ard-sample/src/main/java/com/ard/sample/media/service/impl/FileServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/media/service/impl/FileServiceImpl.java
@@ -4,7 +4,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ard.sample.common.model.Pagination;
 import com.ard.sample.common.model.PaginationData;
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.oss.service.impl.OssServiceContext;
 import com.ard.sample.manage.model.dto.DeviceDictionaryDTO;
 import com.ard.sample.manage.model.enums.DeviceDomainEnum;
diff --git a/ard-sample/src/main/java/com/ard/sample/storage/service/impl/StorageServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/storage/service/impl/StorageServiceImpl.java
index a449570..3054078 100644
--- a/ard-sample/src/main/java/com/ard/sample/storage/service/impl/StorageServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/storage/service/impl/StorageServiceImpl.java
@@ -2,7 +2,7 @@
 
 import com.ard.sample.component.mqtt.model.*;
 import com.ard.sample.component.mqtt.service.IMessageSenderService;
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.oss.service.impl.OssServiceContext;
 import com.ard.sample.media.model.StsCredentialsDTO;
 import com.ard.sample.storage.service.IStorageService;
diff --git a/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineFileServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineFileServiceImpl.java
index 8d70191..aa753df 100644
--- a/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineFileServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineFileServiceImpl.java
@@ -7,7 +7,7 @@
 import com.ard.common.core.page.TableSupport;
 import com.ard.sample.common.model.Pagination;
 import com.ard.sample.common.model.PaginationData;
-import com.ard.sample.component.oss.model.OssConfiguration;
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.oss.service.impl.OssServiceContext;
 import com.ard.sample.manage.model.enums.DeviceDomainEnum;
 import com.ard.sample.wayline.mapper.IWaylineFileMapper;
diff --git a/ard-work/pom.xml b/ard-work/pom.xml
index 6d3b0ce..0a3c6c7 100644
--- a/ard-work/pom.xml
+++ b/ard-work/pom.xml
@@ -86,11 +86,7 @@
             <artifactId>gt-epsg-hsql</artifactId>
             <version>28.2</version>
         </dependency>
-        <!--minio-->
-        <dependency>
-            <groupId>io.minio</groupId>
-            <artifactId>minio</artifactId>
-        </dependency>
+
         <!--DOM4j-->
         <dependency>
             <groupId>org.dom4j</groupId>
diff --git a/ard-work/src/main/java/com/ard/work/component/minio/config/MinioConfig.java b/ard-work/src/main/java/com/ard/work/component/minio/config/MinioConfig.java
deleted file mode 100644
index c7c00b9..0000000
--- a/ard-work/src/main/java/com/ard/work/component/minio/config/MinioConfig.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.ard.work.component.minio.config;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import io.minio.MinioClient;
-
-/**
- * Minio 配置信息
- *
- * @author ruoyi
- */
-@Data
-@Configuration
-@ConfigurationProperties(prefix = "minio")
-public class MinioConfig {
-
-    /**
-     * 服务地址
-     */
-    private String url;
-
-    /**
-     * 用户名
-     */
-    private String accessKey;
-
-    /**
-     * 密码
-     */
-    private String secretKey;
-
-    /**
-     * 存储桶名称
-     */
-    private String bucketName;
-
-
-    @Bean
-    public MinioClient getMinioClient() {
-        return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
-    }
-}
diff --git a/ard-work/src/main/java/com/ard/work/component/netty/handler/ClientHandler.java b/ard-work/src/main/java/com/ard/work/component/netty/handler/ClientHandler.java
index 88c39bd..c3eab84 100644
--- a/ard-work/src/main/java/com/ard/work/component/netty/handler/ClientHandler.java
+++ b/ard-work/src/main/java/com/ard/work/component/netty/handler/ClientHandler.java
@@ -47,7 +47,7 @@
         String host = remoteAddress.getHostString();
         int port = remoteAddress.getPort();
 
-        log.info("与天宇服务器 [{}] 连接成功 ({}:{})", serverId, host, port);
+        log.info("与边缘服务器 [{}] 连接成功 ({}:{})", serverId, host, port);
 
         // 针对当前连接的服务器进行注册
         tyService.registerMessage(serverId);
diff --git a/ard-work/src/main/java/com/ard/work/service/impl/KmzFileServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/KmzFileServiceImpl.java
index db67fd3..b56251f 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/KmzFileServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/KmzFileServiceImpl.java
@@ -1,7 +1,7 @@
 package com.ard.work.service.impl;
 
-import com.ard.work.component.minio.config.MinioConfig;
-import com.ard.work.component.minio.utils.MinioUtil;
+import com.ard.common.config.OssConfiguration;
+import com.ard.common.utils.file.MinioUtil;
 import com.ard.work.config.WaylinePlaningConfig;
 import com.ard.work.domain.dto.wayline.*;
 import com.ard.work.domain.entity.UavWayline;
@@ -34,9 +34,6 @@
 @Slf4j
 @Transactional
 public class KmzFileServiceImpl implements IKmzFileService {
-
-    @Resource
-    private MinioConfig minioConfig;
 
     @Resource
     private IGeoToolsService geoToolsService;
@@ -430,9 +427,9 @@
                 //构建记录
                 String objectKey = fileName;
                 //若已经存在,则先删除,再添加
-                if (MinioUtil.exists(minioConfig.getBucketName(), objectKey))
-                    MinioUtil.delete(minioConfig.getBucketName(), objectKey);
-                String kmzUrl = MinioUtil.uploadInputStream(minioConfig.getBucketName(), objectKey, inputStream,
+                if (MinioUtil.exists(OssConfiguration.bucket, objectKey))
+                    MinioUtil.delete(OssConfiguration.bucket, objectKey);
+                String kmzUrl = MinioUtil.uploadInputStream(OssConfiguration.bucket, objectKey, inputStream,
                         inputStream.available(), "application/octet-stream");
                 // 更新航线kmz地址
                 UavWayline uavWayline =  UavWayline.builder()

--
Gitblit v1.9.3