From b9461fd1ec44382c27ea35c66970d5ba14b64056 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Mon, 13 Oct 2025 14:23:12 +0800
Subject: [PATCH] 增加存储模块

---
 ard-admin/src/main/java/com/ard/web/controller/storage/FileUploadController.java             |   69 ++++
 ard-sample/src/main/java/com/ard/sample/wayline/service/impl/WaylineFileServiceImpl.java     |    4 
 ard-admin/src/main/java/com/ard/web/controller/common/CommonController.java                  |   48 ---
 ard-oss/src/main/java/com/ard/oss/service/impl/AmazonS3ServiceImpl.java                      |   64 ++--
 ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java                        |  165 +++++++++++
 ard-oss/src/main/java/com/ard/oss/service/impl/AliyunOssServiceImpl.java                     |    9 
 ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceLogsServiceImpl.java       |    2 
 ard-oss/src/main/java/com/ard/oss/model/MinioUploadResult.java                               |    3 
 ard-work/src/main/java/com/ard/work/service/impl/KmzFileServiceImpl.java                     |   11 
 ard-sample/src/main/java/com/ard/sample/storage/service/IStorageService.java                 |    2 
 ard-oss/src/main/java/com/ard/oss/config/OssConfiguration.java                               |   94 ++++++
 pom.xml                                                                                      |   10 
 ard-admin/src/main/java/com/ard/web/core/config/SwaggerConfig.java                           |    8 
 ard-sample/src/main/java/com/ard/sample/manage/model/dto/LogsUploadCredentialsDTO.java       |    4 
 ard-oss/src/main/java/com/ard/oss/model/enums/OssTypeEnum.java                               |    2 
 ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceFirmwareServiceImpl.java   |    4 
 ard-oss/src/main/java/com/ard/oss/service/impl/OssAspectHandler.java                         |    4 
 ard-common/src/main/java/com/ard/common/utils/file/FileUploadUtils.java                      |   54 ---
 ard-oss/src/main/java/com/ard/oss/model/StsCredentialsDTO.java                               |    2 
 ard-oss/src/main/java/com/ard/oss/model/CredentialsDTO.java                                  |    2 
 ard-sample/src/main/java/com/ard/sample/manage/service/impl/LogsFileServiceImpl.java         |    5 
 ard-work/pom.xml                                                                             |    4 
 /dev/null                                                                                    |   68 ----
 ard-sample/pom.xml                                                                           |   37 --
 ard-oss/src/main/java/com/ard/oss/service/impl/MinIOServiceImpl.java                         |   73 +++-
 ard-sample/src/main/java/com/ard/sample/storage/service/impl/StorageServiceImpl.java         |    6 
 ard-oss/pom.xml                                                                              |   70 +++++
 ard-sample/src/main/java/com/ard/sample/component/websocket/config/AuthPrincipalHandler.java |    3 
 ard-sample/src/main/java/com/ard/sample/media/service/impl/FileServiceImpl.java              |    5 
 ard-oss/src/main/java/com/ard/oss/service/IOssService.java                                   |    6 
 30 files changed, 538 insertions(+), 300 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 d8fd6fe..9ba658c 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
@@ -5,10 +5,7 @@
 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;
@@ -22,8 +19,6 @@
 import com.ard.common.utils.file.FileUploadUtils;
 import com.ard.common.utils.file.FileUtils;
 import com.ard.framework.config.ServerConfig;
-
-import static com.ard.common.utils.file.MinioUtil.uploadFile;
 
 /**
  * 通用请求处理
@@ -166,48 +161,5 @@
         }
     }
 
-
-    /**
-     * 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/sample/storage/StorageController.java b/ard-admin/src/main/java/com/ard/web/controller/sample/storage/StorageController.java
deleted file mode 100644
index 8e0befc..0000000
--- a/ard-admin/src/main/java/com/ard/web/controller/sample/storage/StorageController.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.ard.web.controller.sample.storage;
-
-import com.ard.sample.common.model.ResponseResult;
-import com.ard.sample.media.model.StsCredentialsDTO;
-import com.ard.sample.storage.service.IStorageService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author sean
- * @version 0.3
- * @date 2021/12/29
- */
-@RestController
-@RequestMapping("/dock/storage/workspaces/")
-public class StorageController {
-
-    @Autowired
-    private IStorageService storageService;
-
-    /**
-     * Get temporary credentials for uploading the media and wayline in DJI Pilot.
-     * @param workspaceId
-     * @return
-     */
-    @PostMapping("/{workspace_id}/sts")
-    public ResponseResult<StsCredentialsDTO> getSTSCredentials(@PathVariable(name = "workspace_id") String workspaceId) {
-
-        StsCredentialsDTO stsCredentials = storageService.getSTSCredentials();
-        return ResponseResult.success(stsCredentials);
-    }
-
-}
diff --git a/ard-admin/src/main/java/com/ard/web/controller/storage/FileUploadController.java b/ard-admin/src/main/java/com/ard/web/controller/storage/FileUploadController.java
new file mode 100644
index 0000000..c09d70e
--- /dev/null
+++ b/ard-admin/src/main/java/com/ard/web/controller/storage/FileUploadController.java
@@ -0,0 +1,69 @@
+package com.ard.web.controller.storage;
+
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.oss.model.MinioUploadResult;
+import com.ard.common.utils.file.FileUtils;
+import com.ard.oss.service.impl.OssServiceContext;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+/**
+ * 文件上传管理接口
+ *
+ * @author ruoyi
+ */
+@Api(tags = "文件上传管理接口")
+@RestController
+@RequestMapping("/common")
+public class FileUploadController {
+
+    @Resource
+    private OssServiceContext ossService;
+
+    /**
+     * minio上传文件
+     */
+    @ApiOperation("minio文件上传")
+    @PostMapping("/uploadMinio")
+    public AjaxResult uploadFileMinio(@RequestPart MultipartFile file) {
+        try {
+            // 上传并返回新文件名称
+            String url = ossService.upload(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 = ossService.upload(bucketName,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());
+        }
+    }
+
+}
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 ec9e1f9..71ef983 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
@@ -149,16 +149,16 @@
                 .securityContexts(securityContexts());
     }
     @Bean
-    public Docket commonApi() {
+    public Docket storageApi() {
         return new Docket(DocumentationType.SWAGGER_2)
                 .enable(true)
-                .groupName("公共请求接口")   // 分组名
-                .apiInfo(apiInfo("公共请求管理接口"))
+                .groupName("存储接口")   // 分组名
+                .apiInfo(apiInfo("存储管理接口"))
                 .select()
                 // 扫描指定包下,但只扫描加了 @ApiOperation 注解的方法
                 .apis(requestHandler ->
                         requestHandler.declaringClass().getPackage().getName().startsWith("com.ard.web.controller" +
-                                ".common") &&
+                                ".storage") &&
                                 requestHandler.isAnnotatedWith(io.swagger.annotations.ApiOperation.class)
                 )
                 .paths(PathSelectors.any())
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
deleted file mode 100644
index 7e62abc..0000000
--- a/ard-common/src/main/java/com/ard/common/config/OssConfiguration.java
+++ /dev/null
@@ -1,129 +0,0 @@
-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/utils/file/FileUploadUtils.java b/ard-common/src/main/java/com/ard/common/utils/file/FileUploadUtils.java
index 1a0727d..bb5976b 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
@@ -5,7 +5,6 @@
 import java.nio.file.Paths;
 import java.util.Objects;
 
-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;
@@ -38,10 +37,6 @@
      */
     private static String defaultBaseDir = UavConfig.getProfile();
 
-    /**
-     * Minio默认上传的地址
-     */
-    private static String bucketName = OssConfiguration.bucket;
 
     public static void setDefaultBaseDir(String defaultBaseDir) {
         FileUploadUtils.defaultBaseDir = defaultBaseDir;
@@ -51,9 +46,6 @@
         return defaultBaseDir;
     }
 
-    public static String getBucketName() {
-        return bucketName;
-    }
 
     /**
      * 以默认配置进行文件上传
@@ -115,52 +107,6 @@
         return getPathFileName(baseDir, fileName);
     }
 
-    /**
-     * 以默认BucketName配置上传到Minio服务器
-     *
-     * @param file 上传的文件
-     * @return 文件名称
-     * @throws Exception
-     */
-    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);
-        }
-    }
-
-    /**
-     * 自定义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);
-        }
-    }
 
     /**
      * 编码文件名
diff --git a/ard-common/src/main/java/com/ard/common/utils/file/MinioUtil.java b/ard-common/src/main/java/com/ard/common/utils/file/MinioUtil.java
deleted file mode 100644
index 9c2aa55..0000000
--- a/ard-common/src/main/java/com/ard/common/utils/file/MinioUtil.java
+++ /dev/null
@@ -1,221 +0,0 @@
-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.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
-{
-
-    /**
-     * 判断桶是否存在
-     *
-     * @param bucketName 桶名称
-     * @return 如果桶存在返回 true,否则返回 false
-     * @throws IOException
-     */
-    public static boolean bucketExists(String bucketName) throws IOException {
-        MinioClient minioClient = SpringUtils.getBean(MinioClient.class);
-        try {
-            return minioClient.bucketExists(io.minio.BucketExistsArgs.builder().bucket(bucketName).build());
-        } catch (Exception e) {
-            throw new IOException("Error checking if bucket exists", e);
-        }
-    }
-
-    // 创建桶
-    public static void createBucket(String bucketName) throws IOException {
-        MinioClient minioClient = SpringUtils.getBean(MinioClient.class);
-        try {
-            minioClient.makeBucket(io.minio.MakeBucketArgs.builder().bucket(bucketName).build());
-            setBucketPolicy(bucketName);
-        } catch (Exception e) {
-            throw new IOException("Error creating bucket", e);
-        }
-    }
-
-
-    /**
-     * 设置桶策略
-     * 刘苏义
-     * 2023/9/20 10:01:39
-     */
-    public static boolean setBucketPolicy(String bucket) throws Exception {
-        MinioClient minioClient = SpringUtils.getBean(MinioClient.class);
-        try {
-            //设置策略
-            String sb = "{\"Version\":\"2012-10-17\"," +
-                    "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" +
-                    "{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"," +
-                    "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucket +
-                    "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\"],\"Resource\":[\"arn:aws:s3:::" +
-                    bucket + "/*\"]}]}";
-            SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
-                    .bucket(bucket)
-                    .config(sb)
-                    .build();
-            minioClient.setBucketPolicy(setBucketPolicyArgs);
-            return true;
-        } catch (Exception ex) {
-            throw new Exception("设置桶策略异常:" + ex.getMessage());
-        }
-    }
-
-
-    /**
-     * 上传文件
-     *
-     * @param bucketName 桶名称
-     * @param fileName 文件名
-     * @throws IOException
-     */
-    public static String uploadFile(String bucketName, String fileName, MultipartFile multipartFile) throws IOException {
-        String url = "";
-        MinioClient minioClient = SpringUtils.getBean(MinioClient.class);
-        try (InputStream inputStream = multipartFile.getInputStream()) {
-            minioClient.putObject(PutObjectArgs.builder().
-                    bucket(bucketName).
-                    object(fileName).
-                    stream(inputStream,multipartFile.getSize(), -1).
-                    contentType(multipartFile.getContentType()).
-                    build());
-            url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().
-                    bucket(bucketName).
-                    object(fileName).
-                    method(Method.GET).
-                    build());
-            url = url.substring(0, url.indexOf('?'));
-            return ServletUtils.urlDecode(url);
-        } catch (Exception e) {
-            throw new IOException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * 上传本地文件
-     *
-     * @param bucketName    桶名称
-     * @param fileName      存储到 Minio 的文件名
-     * @param localFilePath 本地文件绝对路径
-     * @return 访问 URL
-     * @throws IOException
-     */
-    public static String uploadLocalFile(String bucketName, String fileName, String localFilePath) throws IOException {
-        MinioClient minioClient = SpringUtils.getBean(MinioClient.class);
-        try (InputStream inputStream = new FileInputStream(localFilePath)) {
-            File file = new File(localFilePath);
-            minioClient.putObject(
-                    PutObjectArgs.builder()
-                            .bucket(bucketName)
-                            .object(fileName)
-                            .stream(inputStream, file.length(), -1)
-                            .contentType("application/octet-stream") // 可根据需求自行修改
-                            .build()
-            );
-            String url = minioClient.getPresignedObjectUrl(
-                    GetPresignedObjectUrlArgs.builder()
-                            .bucket(bucketName)
-                            .object(fileName)
-                            .method(Method.GET)
-                            .build()
-            );
-            return ServletUtils.urlDecode(url.substring(0, url.indexOf('?')));
-        } catch (Exception e) {
-            throw new IOException(e.getMessage(), e);
-        }
-    }
-
-    public static String uploadInputStream(String bucketName, String fileName, InputStream inputStream, long size,
-                                           String contentType) throws IOException {
-        MinioClient minioClient = SpringUtils.getBean(MinioClient.class);
-        if (!bucketExists(bucketName)) {
-            createBucket(bucketName);
-        }
-        try {
-            minioClient.putObject(
-                    PutObjectArgs.builder()
-                            .bucket(bucketName)
-                            .object(fileName)
-                            .stream(inputStream, size, -1)
-                            .contentType(contentType)
-                            .build()
-            );
-
-            String url = minioClient.getPresignedObjectUrl(
-                    GetPresignedObjectUrlArgs.builder()
-                            .bucket(bucketName)
-                            .object(fileName)
-                            .method(Method.GET)
-                            .build()
-            );
-            url = url.substring(0, url.indexOf('?'));
-            return ServletUtils.urlDecode(url);
-        } catch (Exception e) {
-            throw new IOException(e.getMessage(), e);
-        } finally {
-            if (inputStream != null) {
-                try {
-                    inputStream.close();
-                } catch (IOException ignore) {
-                }
-            }
-        }
-    }
-
-    /**
-     * 判断文件是否存在
-     */
-    public static boolean exists(String bucketName, String fileName) throws IOException {
-        MinioClient minioClient = SpringUtils.getBean(MinioClient.class);
-        if (!bucketExists(bucketName)) {
-            createBucket(bucketName);
-        }
-        try {
-            minioClient.statObject(
-                    io.minio.StatObjectArgs.builder()
-                            .bucket(bucketName)
-                            .object(fileName)
-                            .build()
-            );
-            return true;
-        } catch (io.minio.errors.ErrorResponseException e) {
-            if ("NoSuchKey".equals(e.errorResponse().code()) || "NoSuchObject".equals(e.errorResponse().code())) {
-                return false;
-            }
-            throw new IOException(e.getMessage(), e);
-        } catch (Exception e) {
-            throw new IOException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * 删除文件
-     */
-    public static void delete(String bucketName, String fileName) throws IOException {
-        MinioClient minioClient = SpringUtils.getBean(MinioClient.class);
-        try {
-            minioClient.removeObject(
-                    io.minio.RemoveObjectArgs.builder()
-                            .bucket(bucketName)
-                            .object(fileName)
-                            .build()
-            );
-        } catch (Exception e) {
-            throw new IOException(e.getMessage(), e);
-        }
-    }
-}
diff --git a/ard-oss/pom.xml b/ard-oss/pom.xml
new file mode 100644
index 0000000..6e3504c
--- /dev/null
+++ b/ard-oss/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ard</artifactId>
+        <groupId>com.ard</groupId>
+        <version>3.8.8</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ard-oss</artifactId>
+
+    <description>
+        存储模块
+    </description>
+    <properties>
+        <aliyun-sdk-sts.version>3.1.0</aliyun-sdk-sts.version>
+        <aliyun-oss.version>3.12.0</aliyun-oss.version>
+    </properties>
+    <dependencies>
+        <!-- 通用工具-->
+        <dependency>
+            <groupId>com.ard</groupId>
+            <artifactId>ard-common</artifactId>
+        </dependency>
+
+        <!-- minio依赖-->
+        <dependency>
+            <groupId>io.minio</groupId>
+            <artifactId>minio</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk-s3</artifactId>
+            <version>1.12.261</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk-sts</artifactId>
+            <version>1.12.261</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-sts</artifactId>
+            <version>${aliyun-sdk-sts.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+            <version>${aliyun-oss.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/ard-oss/src/main/java/com/ard/oss/config/OssConfiguration.java b/ard-oss/src/main/java/com/ard/oss/config/OssConfiguration.java
new file mode 100644
index 0000000..4d10274
--- /dev/null
+++ b/ard-oss/src/main/java/com/ard/oss/config/OssConfiguration.java
@@ -0,0 +1,94 @@
+package com.ard.common.config;
+
+import com.ard.oss.model.enums.OssTypeEnum;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author sean
+ * @version 0.2
+ * @date 2021/12/9
+ */
+@Component
+@ConfigurationProperties(prefix = "oss")
+public class OssConfiguration {
+
+    /**
+     * @see 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/media/model/CredentialsDTO.java b/ard-oss/src/main/java/com/ard/oss/model/CredentialsDTO.java
similarity index 97%
rename from ard-sample/src/main/java/com/ard/sample/media/model/CredentialsDTO.java
rename to ard-oss/src/main/java/com/ard/oss/model/CredentialsDTO.java
index b00feb4..ef6e563 100644
--- a/ard-sample/src/main/java/com/ard/sample/media/model/CredentialsDTO.java
+++ b/ard-oss/src/main/java/com/ard/oss/model/CredentialsDTO.java
@@ -1,4 +1,4 @@
-package com.ard.sample.media.model;
+package com.ard.oss.model;
 
 import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
 import io.minio.credentials.Credentials;
diff --git a/ard-common/src/main/java/com/ard/common/core/domain/entity/MinioUploadResult.java b/ard-oss/src/main/java/com/ard/oss/model/MinioUploadResult.java
similarity index 84%
rename from ard-common/src/main/java/com/ard/common/core/domain/entity/MinioUploadResult.java
rename to ard-oss/src/main/java/com/ard/oss/model/MinioUploadResult.java
index a21a958..ff9a5af 100644
--- a/ard-common/src/main/java/com/ard/common/core/domain/entity/MinioUploadResult.java
+++ b/ard-oss/src/main/java/com/ard/oss/model/MinioUploadResult.java
@@ -1,6 +1,5 @@
-package com.ard.common.core.domain.entity;
+package com.ard.oss.model;
 
-import com.ard.common.annotation.DataScope;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
diff --git a/ard-sample/src/main/java/com/ard/sample/media/model/StsCredentialsDTO.java b/ard-oss/src/main/java/com/ard/oss/model/StsCredentialsDTO.java
similarity index 94%
rename from ard-sample/src/main/java/com/ard/sample/media/model/StsCredentialsDTO.java
rename to ard-oss/src/main/java/com/ard/oss/model/StsCredentialsDTO.java
index c9d2e6f..9a00317 100644
--- a/ard-sample/src/main/java/com/ard/sample/media/model/StsCredentialsDTO.java
+++ b/ard-oss/src/main/java/com/ard/oss/model/StsCredentialsDTO.java
@@ -1,4 +1,4 @@
-package com.ard.sample.media.model;
+package com.ard.oss.model;
 
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
 import com.fasterxml.jackson.databind.annotation.JsonNaming;
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/model/enums/OssTypeEnum.java b/ard-oss/src/main/java/com/ard/oss/model/enums/OssTypeEnum.java
similarity index 85%
rename from ard-sample/src/main/java/com/ard/sample/component/oss/model/enums/OssTypeEnum.java
rename to ard-oss/src/main/java/com/ard/oss/model/enums/OssTypeEnum.java
index df84519..4ba294d 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/model/enums/OssTypeEnum.java
+++ b/ard-oss/src/main/java/com/ard/oss/model/enums/OssTypeEnum.java
@@ -1,4 +1,4 @@
-package com.ard.sample.component.oss.model.enums;
+package com.ard.oss.model.enums;
 
 /**
  * @author sean
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/IOssService.java b/ard-oss/src/main/java/com/ard/oss/service/IOssService.java
similarity index 90%
rename from ard-sample/src/main/java/com/ard/sample/component/oss/service/IOssService.java
rename to ard-oss/src/main/java/com/ard/oss/service/IOssService.java
index 6b24fc2..c2d8224 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/IOssService.java
+++ b/ard-oss/src/main/java/com/ard/oss/service/IOssService.java
@@ -1,7 +1,6 @@
-package com.ard.sample.component.oss.service;
+package com.ard.oss.service;
 
-import com.ard.sample.media.model.CredentialsDTO;
-
+import com.ard.oss.model.CredentialsDTO;
 import java.io.InputStream;
 import java.net.URL;
 
@@ -47,4 +46,5 @@
     void putObject(String bucket, String objectKey, InputStream input);
 
     void createClient();
+
 }
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AliyunOssServiceImpl.java b/ard-oss/src/main/java/com/ard/oss/service/impl/AliyunOssServiceImpl.java
similarity index 93%
rename from ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AliyunOssServiceImpl.java
rename to ard-oss/src/main/java/com/ard/oss/service/impl/AliyunOssServiceImpl.java
index 1c52b51..2e5a941 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AliyunOssServiceImpl.java
+++ b/ard-oss/src/main/java/com/ard/oss/service/impl/AliyunOssServiceImpl.java
@@ -1,4 +1,4 @@
-package com.ard.sample.component.oss.service.impl;
+package com.ard.oss.service.impl;
 
 import com.aliyun.oss.OSS;
 import com.aliyun.oss.OSSClientBuilder;
@@ -13,9 +13,9 @@
 import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
 import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
 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;
+import com.ard.oss.model.CredentialsDTO;
+import com.ard.oss.model.enums.OssTypeEnum;
+import com.ard.oss.service.IOssService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -106,4 +106,5 @@
         this.ossClient = new OSSClientBuilder()
                 .build(OssConfiguration.endpoint, OssConfiguration.accessKey, OssConfiguration.secretKey);
     }
+
 }
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AmazonS3ServiceImpl.java b/ard-oss/src/main/java/com/ard/oss/service/impl/AmazonS3ServiceImpl.java
similarity index 72%
rename from ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AmazonS3ServiceImpl.java
rename to ard-oss/src/main/java/com/ard/oss/service/impl/AmazonS3ServiceImpl.java
index c68d201..0ba005d 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/AmazonS3ServiceImpl.java
+++ b/ard-oss/src/main/java/com/ard/oss/service/impl/AmazonS3ServiceImpl.java
@@ -1,30 +1,27 @@
-package com.ard.sample.component.oss.service.impl;
+package com.ard.oss.service.impl;
 
 import com.amazonaws.HttpMethod;
 import com.amazonaws.auth.AWSStaticCredentialsProvider;
 import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.s3.AmazonS3;
 import com.amazonaws.services.s3.AmazonS3ClientBuilder;
-import com.amazonaws.services.s3.model.*;
+import com.amazonaws.services.s3.model.ObjectMetadata;
+import com.amazonaws.services.s3.model.PutObjectRequest;
+import com.amazonaws.services.s3.model.PutObjectResult;
 import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
 import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
 import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
 import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
 import com.amazonaws.services.securitytoken.model.Credentials;
-import com.ard.sample.component.AuthInterceptor;
 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;
+import com.ard.oss.model.CredentialsDTO;
+import com.ard.oss.model.enums.OssTypeEnum;
+import com.ard.oss.service.IOssService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
-
-import javax.annotation.PostConstruct;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.ArrayList;
 import java.util.Date;
-import java.util.List;
 import java.util.Objects;
 
 /**
@@ -73,6 +70,7 @@
         client.deleteObject(bucket, objectKey);
         return true;
     }
+
     @Override
     public InputStream getObject(String bucket, String objectKey) {
         return client.getObject(bucket, objectKey).getObjectContent().getDelegateStream();
@@ -99,27 +97,27 @@
                 .build();
     }
 
-    /**
-     * Configuring cross-origin resource sharing
-     */
-    @PostConstruct
-    private void configCORS() {
-        if (!OssConfiguration.enable || !OssTypeEnum.AWS.getType().equals(OssConfiguration.provider)) {
-            return;
-        }
-        List<CORSRule.AllowedMethods> allowedMethods = new ArrayList<>();
-        allowedMethods.add(CORSRule.AllowedMethods.GET);
-        allowedMethods.add(CORSRule.AllowedMethods.POST);
-        allowedMethods.add(CORSRule.AllowedMethods.DELETE);
-
-        CORSRule rule = new CORSRule()
-                .withId("CORSAccessRule")
-                .withAllowedOrigins(List.of("*"))
-                .withAllowedHeaders(List.of(AuthInterceptor.PARAM_TOKEN))
-                .withAllowedMethods(allowedMethods);
-
-        client.setBucketCrossOriginConfiguration(OssConfiguration.bucket,
-                new BucketCrossOriginConfiguration().withRules(rule));
-        
-    }
+//    /**
+//     * Configuring cross-origin resource sharing
+//     */
+//    @PostConstruct
+//    private void configCORS() {
+//        if (!OssConfiguration.enable || !OssTypeEnum.AWS.getType().equals(OssConfiguration.provider)) {
+//            return;
+//        }
+//        List<CORSRule.AllowedMethods> allowedMethods = new ArrayList<>();
+//        allowedMethods.add(CORSRule.AllowedMethods.GET);
+//        allowedMethods.add(CORSRule.AllowedMethods.POST);
+//        allowedMethods.add(CORSRule.AllowedMethods.DELETE);
+//
+//        CORSRule rule = new CORSRule()
+//                .withId("CORSAccessRule")
+//                .withAllowedOrigins(List.of("*"))
+//                .withAllowedHeaders(List.of(AuthInterceptor.PARAM_TOKEN))
+//                .withAllowedMethods(allowedMethods);
+//
+//        client.setBucketCrossOriginConfiguration(OssConfiguration.bucket,
+//                new BucketCrossOriginConfiguration().withRules(rule));
+//
+//    }
 }
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/MinIOServiceImpl.java b/ard-oss/src/main/java/com/ard/oss/service/impl/MinIOServiceImpl.java
similarity index 60%
rename from ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/MinIOServiceImpl.java
rename to ard-oss/src/main/java/com/ard/oss/service/impl/MinIOServiceImpl.java
index 901ef70..758b8b3 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/MinIOServiceImpl.java
+++ b/ard-oss/src/main/java/com/ard/oss/service/impl/MinIOServiceImpl.java
@@ -1,23 +1,32 @@
-package com.ard.sample.component.oss.service.impl;
+package com.ard.oss.service.impl;
 
 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;
+import com.ard.oss.model.CredentialsDTO;
+import com.ard.oss.model.enums.OssTypeEnum;
+import com.ard.oss.service.IOssService;
 import io.minio.*;
 import io.minio.credentials.AssumeRoleProvider;
 import io.minio.errors.*;
 import io.minio.http.Method;
 import lombok.extern.slf4j.Slf4j;
+import okhttp3.OkHttpClient;
 import org.springframework.stereotype.Service;
 
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
 import java.util.Objects;
+
+import static com.ard.common.config.OssConfiguration.*;
 
 /**
  * @author sean
@@ -29,7 +38,7 @@
 public class MinIOServiceImpl implements IOssService {
 
     private MinioClient client;
-    
+
     @Override
     public String getOssType() {
         return OssTypeEnum.MINIO.getType();
@@ -38,8 +47,8 @@
     @Override
     public CredentialsDTO getCredentials() {
         try {
-            AssumeRoleProvider provider = new AssumeRoleProvider(OssConfiguration.endpoint, OssConfiguration.accessKey,
-                    OssConfiguration.secretKey, Math.toIntExact(OssConfiguration.expire),
+            AssumeRoleProvider provider = new AssumeRoleProvider(endpoint, accessKey,
+                    secretKey, Math.toIntExact(OssConfiguration.expire),
                     null, OssConfiguration.region, null, null, null, null);
             return new CredentialsDTO(provider.fetch(), OssConfiguration.expire);
         } catch (NoSuchAlgorithmException e) {
@@ -54,15 +63,15 @@
         try {
             return new URL(
                     client.getPresignedObjectUrl(
-                                    GetPresignedObjectUrlArgs.builder()
-                                            .method(Method.GET)
-                                            .bucket(bucket)
-                                            .object(objectKey)
-                                            .expiry(Math.toIntExact(OssConfiguration.expire))
-                                            .build()));
+                            GetPresignedObjectUrlArgs.builder()
+                                    .method(Method.GET)
+                                    .bucket(bucket)
+                                    .object(objectKey)
+                                    .expiry(Math.toIntExact(OssConfiguration.expire))
+                                    .build()));
         } catch (ErrorResponseException | InsufficientDataException | InternalException |
-                InvalidKeyException | InvalidResponseException | IOException |
-                NoSuchAlgorithmException | XmlParserException | ServerException e) {
+                 InvalidKeyException | InvalidResponseException | IOException |
+                 NoSuchAlgorithmException | XmlParserException | ServerException e) {
             throw new RuntimeException("The file does not exist on the OssConfiguration.");
         }
     }
@@ -114,10 +123,34 @@
         if (Objects.nonNull(this.client)) {
             return;
         }
-        this.client = MinioClient.builder()
-                .endpoint(OssConfiguration.endpoint)
-                .credentials(OssConfiguration.accessKey, OssConfiguration.secretKey)
-                .region(OssConfiguration.region)
-                .build();
+        try {
+            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[]{}; }
+                    }
+            };
+
+            SSLContext sslContext = SSLContext.getInstance("TLS");
+            sslContext.init(null, trustAllCerts, new SecureRandom());
+            SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
+
+            OkHttpClient httpClient = new OkHttpClient.Builder()
+                    .sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0])
+                    .hostnameVerifier((hostname, session) -> true)
+                    .build();
+
+            this.client = MinioClient.builder()
+                    .endpoint(endpoint)
+                    .credentials(accessKey, secretKey)
+                    .httpClient(httpClient)
+                    .build();
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to create unsafe MinioClient", e);
+        }
     }
 }
diff --git a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssAspectHandler.java b/ard-oss/src/main/java/com/ard/oss/service/impl/OssAspectHandler.java
similarity index 83%
rename from ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssAspectHandler.java
rename to ard-oss/src/main/java/com/ard/oss/service/impl/OssAspectHandler.java
index 44afd4b..fe6fc37 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssAspectHandler.java
+++ b/ard-oss/src/main/java/com/ard/oss/service/impl/OssAspectHandler.java
@@ -1,4 +1,4 @@
-package com.ard.sample.component.oss.service.impl;
+package com.ard.oss.service.impl;
 
 import com.ard.common.config.OssConfiguration;
 import org.aspectj.lang.annotation.Aspect;
@@ -18,7 +18,7 @@
     @Autowired
     private OssServiceContext ossServiceContext;
 
-    @Before("execution(public * com.ard.sample.component.oss.service.impl.OssServiceContext.*(..))")
+    @Before("execution(public * com.ard.oss.service.impl.OssServiceContext.*(..))")
     public void before() {
         if (!OssConfiguration.enable) {
             throw new IllegalArgumentException("Please enable OssConfiguration.");
diff --git a/ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java b/ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java
new file mode 100644
index 0000000..c3f7a89
--- /dev/null
+++ b/ard-oss/src/main/java/com/ard/oss/service/impl/OssServiceContext.java
@@ -0,0 +1,165 @@
+package com.ard.oss.service.impl;
+
+import com.ard.common.config.OssConfiguration;
+import com.ard.common.exception.file.FileNameLengthLimitExceededException;
+import com.ard.common.exception.file.FileSizeLimitExceededException;
+import com.ard.common.exception.file.InvalidExtensionException;
+import com.ard.common.utils.file.FileUploadUtils;
+import com.ard.common.utils.file.MimeTypeUtils;
+import com.ard.oss.model.CredentialsDTO;
+import com.ard.oss.model.enums.OssTypeEnum;
+import com.ard.oss.service.IOssService;
+import io.minio.PutObjectArgs;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+
+import static com.ard.common.utils.file.FileUploadUtils.assertAllowed;
+import static com.ard.common.utils.file.FileUploadUtils.extractFilename;
+
+/**
+ * @author sean
+ * @version 1.0
+ * @date 2022/5/30
+ */
+@Service
+public class OssServiceContext {
+
+    private IOssService ossService;
+
+    @Autowired
+    public OssServiceContext(List<IOssService> ossServices, OssConfiguration configuration) {
+        if (!OssConfiguration.enable) {
+            return;
+        }
+        this.ossService = ossServices.stream()
+                .filter(ossService -> ossService.getOssType().equals(OssConfiguration.provider))
+                .findFirst()
+                .orElseThrow(() -> new IllegalArgumentException("Oss provider is illegal. Optional: " +
+                        Arrays.toString(Arrays.stream(OssTypeEnum.values()).map(OssTypeEnum::getType).toArray())));
+    }
+
+    IOssService getOssService() {
+        return this.ossService;
+    }
+
+    public CredentialsDTO getCredentials() {
+        return this.ossService.getCredentials();
+    }
+
+    public URL getObjectUrl(String bucket, String objectKey) {
+        if (!StringUtils.hasText(bucket) || !StringUtils.hasText(objectKey)) {
+            throw new IllegalArgumentException();
+        }
+        return this.ossService.getObjectUrl(bucket, objectKey);
+    }
+
+    public Boolean deleteObject(String bucket, String objectKey) {
+        return this.ossService.deleteObject(bucket, objectKey);
+    }
+
+    public InputStream getObject(String bucket, String objectKey) {
+        return this.ossService.getObject(bucket, objectKey);
+    }
+
+    public void putObject(String bucket, String objectKey, InputStream stream) {
+        this.ossService.putObject(bucket, objectKey, stream);
+    }
+
+
+    void createClient() {
+        this.ossService.createClient();
+    }
+
+    /**
+     * 以默认BucketName配置上传到Minio服务器
+     *
+     * @param file 上传的文件
+     * @return 文件名称
+     * @throws Exception
+     */
+    public String upload(MultipartFile file) throws IOException {
+        try {
+            return upload(OssConfiguration.bucket, null, file);
+        } catch (Exception e) {
+            throw new IOException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 自定义bucketName配置上传到Minio服务器
+     *
+     * @param file 上传的文件
+     * @return 文件名称
+     * @throws Exception
+     */
+    public String upload(String bucket, MultipartFile file) throws IOException {
+        try {
+            return upload(bucket, null, file);
+        } catch (Exception e) {
+            throw new IOException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * ✅ 通用上传方法:
+     * - bucket 必传
+     * - object 可选(为空则自动生成)
+     * - 返回永久访问 URL
+     */
+    public String upload(String bucket, String object, MultipartFile file) throws IOException {
+        try {
+            // 校验文件名长度
+            int fileNameLength = file.getOriginalFilename().length();
+            if (fileNameLength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
+                throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
+            }
+
+            // 检查文件扩展名是否合法
+            assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
+
+            // ✅ 如果 object 为空,则自动生成文件名
+            String objectName = (object == null || object.isEmpty())
+                    ? extractFilename(file)
+                    : object;
+
+            // 上传文件到 Minio
+            this.ossService.putObject(bucket, objectName, file.getInputStream());
+
+            // ✅ 拼接永久 URL(不带 presigned 过期参数)
+            String baseUrl = OssConfiguration.endpoint;
+            if (!baseUrl.endsWith("/")) {
+                baseUrl += "/";
+            }
+
+            return baseUrl + bucket + "/" + objectName;
+        } catch (Exception e) {
+            throw new IOException("Upload failed: " + e.getMessage(), e);
+        }
+    }
+
+    public String upload(String bucket, String objectKey, InputStream input) {
+        try {
+
+            // 上传文件
+            this.ossService.putObject(bucket, objectKey, input);
+
+            // ✅ 构建永久访问 URL
+            String baseUrl = OssConfiguration.endpoint;
+            if (!baseUrl.endsWith("/")) {
+                baseUrl += "/";
+            }
+            return baseUrl + bucket + "/" + objectKey;
+        } catch (Exception e) {
+            throw new RuntimeException("Upload failed: " + e.getMessage(), e);
+        }
+    }
+
+}
diff --git a/ard-sample/pom.xml b/ard-sample/pom.xml
index 5c6abad..8a4e9f4 100644
--- a/ard-sample/pom.xml
+++ b/ard-sample/pom.xml
@@ -28,8 +28,6 @@
         ard-sample机场模块
     </description>
     <properties>
-        <aliyun-sdk-sts.version>3.1.0</aliyun-sdk-sts.version>
-        <aliyun-oss.version>3.12.0</aliyun-oss.version>
         <glassfish-jaxb.version>2.3.3</glassfish-jaxb.version>
         <javax-jaxb.version>2.3.0</javax-jaxb.version>
     </properties>
@@ -43,11 +41,6 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid-spring-boot-starter</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>io.minio</groupId>
-            <artifactId>minio</artifactId>
         </dependency>
 
         <dependency>
@@ -73,17 +66,6 @@
         </dependency>
 
         <dependency>
-            <groupId>com.amazonaws</groupId>
-            <artifactId>aws-java-sdk-s3</artifactId>
-            <version>1.12.261</version>
-        </dependency>
-        <dependency>
-            <groupId>com.amazonaws</groupId>
-            <artifactId>aws-java-sdk-sts</artifactId>
-            <version>1.12.261</version>
-        </dependency>
-
-        <dependency>
             <groupId>org.dom4j</groupId>
             <artifactId>dom4j</artifactId>
             <version>2.1.3</version>
@@ -101,24 +83,11 @@
         </dependency>
 
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-aop</artifactId>
-        </dependency>
-        <dependency>
             <groupId>com.ard</groupId>
             <artifactId>ard-common</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.aliyun</groupId>
-            <artifactId>aliyun-java-sdk-sts</artifactId>
-            <version>${aliyun-sdk-sts.version}</version>
-        </dependency>
 
-        <dependency>
-            <groupId>com.aliyun.oss</groupId>
-            <artifactId>aliyun-sdk-oss</artifactId>
-            <version>${aliyun-oss.version}</version>
-        </dependency>
+
         <!-- 核心模块-->
         <dependency>
             <groupId>com.ard</groupId>
@@ -139,9 +108,11 @@
             <groupId>org.springframework.integration</groupId>
             <artifactId>spring-integration-mqtt</artifactId>
         </dependency>
+
+        <!-- storage模块-->
         <dependency>
             <groupId>com.ard</groupId>
-            <artifactId>ard-common</artifactId>
+            <artifactId>ard-oss</artifactId>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file
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
deleted file mode 100644
index ecc6fd6..0000000
--- a/ard-sample/src/main/java/com/ard/sample/component/oss/service/impl/OssServiceContext.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.ard.sample.component.oss.service.impl;
-
-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;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @author sean
- * @version 1.0
- * @date 2022/5/30
- */
-@Service
-public class OssServiceContext {
-
-    private IOssService ossService;
-
-    @Autowired
-    public OssServiceContext(List<IOssService> ossServices, OssConfiguration configuration) {
-        if (!OssConfiguration.enable) {
-            return;
-        }
-        this.ossService = ossServices.stream()
-                .filter(ossService -> ossService.getOssType().equals(OssConfiguration.provider))
-                .findFirst()
-                .orElseThrow(() -> new IllegalArgumentException("Oss provider is illegal. Optional: " +
-                        Arrays.toString(Arrays.stream(OssTypeEnum.values()).map(OssTypeEnum::getType).toArray())));
-    }
-
-    IOssService getOssService() {
-        return this.ossService;
-    }
-
-    public CredentialsDTO getCredentials() {
-        return this.ossService.getCredentials();
-    }
-
-    public URL getObjectUrl(String bucket, String objectKey) {
-        if (!StringUtils.hasText(bucket) || !StringUtils.hasText(objectKey)) {
-            throw new IllegalArgumentException();
-        }
-        return this.ossService.getObjectUrl(bucket, objectKey);
-    }
-
-    public Boolean deleteObject(String bucket, String objectKey) {
-        return this.ossService.deleteObject(bucket, objectKey);
-    }
-
-    public InputStream getObject(String bucket, String objectKey) {
-        return this.ossService.getObject(bucket, objectKey);
-    }
-
-    public void putObject(String bucket, String objectKey, InputStream stream) {
-        this.ossService.putObject(bucket, objectKey, stream);
-    }
-
-    void createClient() {
-        this.ossService.createClient();
-    }
-}
diff --git a/ard-sample/src/main/java/com/ard/sample/component/websocket/config/AuthPrincipalHandler.java b/ard-sample/src/main/java/com/ard/sample/component/websocket/config/AuthPrincipalHandler.java
index b40b1ef..897fc73 100644
--- a/ard-sample/src/main/java/com/ard/sample/component/websocket/config/AuthPrincipalHandler.java
+++ b/ard-sample/src/main/java/com/ard/sample/component/websocket/config/AuthPrincipalHandler.java
@@ -1,11 +1,8 @@
 package com.ard.sample.component.websocket.config;
 
-import com.ard.common.constant.Constants;
 import com.ard.common.core.domain.model.LoginUser;
 import com.ard.framework.web.service.TokenService;
 import com.ard.sample.component.AuthInterceptor;
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.Jwts;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.http.server.ServletServerHttpRequest;
diff --git a/ard-sample/src/main/java/com/ard/sample/manage/model/dto/LogsUploadCredentialsDTO.java b/ard-sample/src/main/java/com/ard/sample/manage/model/dto/LogsUploadCredentialsDTO.java
index a129982..75535b8 100644
--- a/ard-sample/src/main/java/com/ard/sample/manage/model/dto/LogsUploadCredentialsDTO.java
+++ b/ard-sample/src/main/java/com/ard/sample/manage/model/dto/LogsUploadCredentialsDTO.java
@@ -1,8 +1,8 @@
 package com.ard.sample.manage.model.dto;
 
 import com.ard.sample.manage.model.receiver.LogsFileUploadList;
-import com.ard.sample.media.model.CredentialsDTO;
-import com.ard.sample.media.model.StsCredentialsDTO;
+import com.ard.oss.model.CredentialsDTO;
+import com.ard.oss.model.StsCredentialsDTO;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
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 189c3fb..4a28c37 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
@@ -1,5 +1,7 @@
 package com.ard.sample.manage.service.impl;
 
+import com.ard.common.config.OssConfiguration;
+import com.ard.oss.service.impl.OssServiceContext;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -8,8 +10,6 @@
 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.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;
 import com.ard.sample.component.websocket.config.ConcurrentWebSocketSession;
diff --git a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceLogsServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceLogsServiceImpl.java
index d36b465..d80e995 100644
--- a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceLogsServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceLogsServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ard.sample.manage.service.impl;
 
+import com.ard.sample.storage.service.IStorageService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -24,7 +25,6 @@
 import com.ard.sample.manage.service.IDeviceLogsService;
 import com.ard.sample.manage.service.ILogsFileService;
 import com.ard.sample.manage.service.ITopologyService;
-import com.ard.sample.storage.service.IStorageService;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
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 54afa8d..01a98f4 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
@@ -1,10 +1,10 @@
 package com.ard.sample.manage.service.impl;
 
+import com.ard.common.config.OssConfiguration;
+import com.ard.oss.service.impl.OssServiceContext;
 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.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;
 import com.ard.sample.manage.model.entity.LogsFileEntity;
@@ -17,7 +17,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
-
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
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 d884feb..3e065a3 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
@@ -1,11 +1,11 @@
 package com.ard.sample.media.service.impl;
 
+import com.ard.common.config.OssConfiguration;
+import com.ard.oss.service.impl.OssServiceContext;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.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;
 import com.ard.sample.manage.service.IDeviceDictionaryService;
@@ -17,7 +17,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
 import javax.annotation.Resource;
 import java.net.URL;
 import java.time.Instant;
diff --git a/ard-sample/src/main/java/com/ard/sample/storage/service/IStorageService.java b/ard-sample/src/main/java/com/ard/sample/storage/service/IStorageService.java
index 03b8691..aeb9cf2 100644
--- a/ard-sample/src/main/java/com/ard/sample/storage/service/IStorageService.java
+++ b/ard-sample/src/main/java/com/ard/sample/storage/service/IStorageService.java
@@ -1,7 +1,7 @@
 package com.ard.sample.storage.service;
 
 import com.ard.sample.component.mqtt.model.CommonTopicReceiver;
-import com.ard.sample.media.model.StsCredentialsDTO;
+import com.ard.oss.model.StsCredentialsDTO;
 import org.springframework.messaging.MessageHeaders;
 
 /**
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 3054078..3d02b52 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
@@ -1,11 +1,11 @@
 package com.ard.sample.storage.service.impl;
 
+import com.ard.common.config.OssConfiguration;
 import com.ard.sample.component.mqtt.model.*;
 import com.ard.sample.component.mqtt.service.IMessageSenderService;
-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.oss.model.StsCredentialsDTO;
 import com.ard.sample.storage.service.IStorageService;
+import com.ard.oss.service.impl.OssServiceContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.integration.annotation.ServiceActivator;
 import org.springframework.integration.mqtt.support.MqttHeaders;
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 aa753df..f8f6dbd 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
@@ -1,5 +1,7 @@
 package com.ard.sample.wayline.service.impl;
 
+import com.ard.common.config.OssConfiguration;
+import com.ard.oss.service.impl.OssServiceContext;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -7,8 +9,6 @@
 import com.ard.common.core.page.TableSupport;
 import com.ard.sample.common.model.Pagination;
 import com.ard.sample.common.model.PaginationData;
-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;
 import com.ard.sample.wayline.model.dto.KmzFileProperties;
diff --git a/ard-work/pom.xml b/ard-work/pom.xml
index 0a3c6c7..2556421 100644
--- a/ard-work/pom.xml
+++ b/ard-work/pom.xml
@@ -106,6 +106,10 @@
             <groupId>com.ard</groupId>
             <artifactId>ard-system</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.ard</groupId>
+            <artifactId>ard-oss</artifactId>
+        </dependency>
     </dependencies>
     <repositories>
         <repository>
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 b56251f..05d88b6 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.common.config.OssConfiguration;
-import com.ard.common.utils.file.MinioUtil;
+import com.ard.oss.service.impl.OssServiceContext;
 import com.ard.work.config.WaylinePlaningConfig;
 import com.ard.work.domain.dto.wayline.*;
 import com.ard.work.domain.entity.UavWayline;
@@ -43,6 +43,9 @@
 
     @Resource
     private UavWaylineMapper uavWaylineMapper;
+
+    @Resource
+    private OssServiceContext ossService;
 
     private Document initWayline(Boolean isTemplate) {
         //创建Document对象
@@ -426,11 +429,7 @@
                 InputStream inputStream = new FileInputStream(kmzPath);
                 //构建记录
                 String objectKey = fileName;
-                //若已经存在,则先删除,再添加
-                if (MinioUtil.exists(OssConfiguration.bucket, objectKey))
-                    MinioUtil.delete(OssConfiguration.bucket, objectKey);
-                String kmzUrl = MinioUtil.uploadInputStream(OssConfiguration.bucket, objectKey, inputStream,
-                        inputStream.available(), "application/octet-stream");
+                String kmzUrl = ossService.upload(OssConfiguration.bucket, objectKey, inputStream);
                 // 更新航线kmz地址
                 UavWayline uavWayline =  UavWayline.builder()
                         .id(ardWaylineDTO.waylineId)
diff --git a/pom.xml b/pom.xml
index 270faf9..1acab07 100644
--- a/pom.xml
+++ b/pom.xml
@@ -210,6 +210,15 @@
                 <artifactId>ard-device</artifactId>
                 <version>${ard.version}</version>
             </dependency>
+
+            <!-- 存储模块-->
+            <dependency>
+                <groupId>com.ard</groupId>
+                <artifactId>ard-oss</artifactId>
+                <version>${ard.version}</version>
+            </dependency>
+
+
             <!-- okhttp3-->
             <dependency>
                 <groupId>com.squareup.okhttp3</groupId>
@@ -252,6 +261,7 @@
         <module>ard-vtdu</module>
         <module>ard-route</module>
         <module>ard-device</module>
+        <module>ard-oss</module>
     </modules>
 
     <build>

--
Gitblit v1.9.3