Pārlūkot izejas kodu

build 文件上传接口

mamingxu 2 dienas atpakaļ
vecāks
revīzija
e09dbc1665

+ 2 - 2
easier-common/easier-common-oss/src/main/java/com/yaoyicloud/easier/common/file/FileAutoConfiguration.java

@@ -4,7 +4,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
 import org.springframework.context.annotation.Import;
 
 import com.yaoyicloud.easier.common.file.core.FileProperties;
-import com.yaoyicloud.easier.common.file.local.LocalFileAutoConfiguration;
+
 import com.yaoyicloud.easier.common.file.oss.OssAutoConfiguration;
 
 /**
@@ -14,7 +14,7 @@ import com.yaoyicloud.easier.common.file.oss.OssAutoConfiguration;
  * @version 1.0.0
  * @date 2022-12-02 21:22
  */
-@Import({LocalFileAutoConfiguration.class, OssAutoConfiguration.class})
+@Import({ OssAutoConfiguration.class})
 @EnableConfigurationProperties({FileProperties.class})
 public class FileAutoConfiguration {
 

+ 1 - 7
easier-common/easier-common-oss/src/main/java/com/yaoyicloud/easier/common/file/core/FileProperties.java

@@ -3,7 +3,7 @@ package com.yaoyicloud.easier.common.file.core;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.NestedConfigurationProperty;
 
-import com.yaoyicloud.easier.common.file.local.LocalFileProperties;
+
 import com.yaoyicloud.easier.common.file.oss.OssProperties;
 
 import lombok.Data;
@@ -17,12 +17,6 @@ public class FileProperties {
      */
     private String bucketName = "local";
 
-    /**
-     * 本地文件配置信息
-     */
-    @NestedConfigurationProperty
-    private LocalFileProperties local;
-
     /**
      * oss 文件配置信息
      */

+ 0 - 24
easier-common/easier-common-oss/src/main/java/com/yaoyicloud/easier/common/file/local/LocalFileAutoConfiguration.java

@@ -1,24 +0,0 @@
-package com.yaoyicloud.easier.common.file.local;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
-
-import com.yaoyicloud.easier.common.file.core.FileProperties;
-import com.yaoyicloud.easier.common.file.core.FileTemplate;
-
-import lombok.AllArgsConstructor;
-
-@AllArgsConstructor
-public class LocalFileAutoConfiguration {
-
-    private final FileProperties properties;
-
-    @Bean
-    @ConditionalOnMissingBean(LocalFileTemplate.class)
-    @ConditionalOnProperty(name = "file.local.enable", havingValue = "true", matchIfMissing = true)
-    public FileTemplate localFileTemplate() {
-        return new LocalFileTemplate(properties);
-    }
-
-}

+ 0 - 21
easier-common/easier-common-oss/src/main/java/com/yaoyicloud/easier/common/file/local/LocalFileProperties.java

@@ -1,21 +0,0 @@
-package com.yaoyicloud.easier.common.file.local;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-import lombok.Data;
-
-@Data
-@ConfigurationProperties(prefix = "local")
-public class LocalFileProperties {
-
-    /**
-     * 是否开启
-     */
-    private boolean enable;
-
-    /**
-     * 默认路径
-     */
-    private String basePath;
-
-}

+ 0 - 185
easier-common/easier-common-oss/src/main/java/com/yaoyicloud/easier/common/file/local/LocalFileTemplate.java

@@ -1,185 +0,0 @@
-package com.yaoyicloud.easier.common.file.local;
-
-import java.io.File;
-import java.io.InputStream;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import com.amazonaws.services.s3.model.Bucket;
-import com.amazonaws.services.s3.model.S3Object;
-import com.amazonaws.services.s3.model.S3ObjectSummary;
-import com.yaoyicloud.easier.common.file.core.FileProperties;
-import com.yaoyicloud.easier.common.file.core.FileTemplate;
-
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-
-@RequiredArgsConstructor
-public class LocalFileTemplate implements FileTemplate {
-
-    private final FileProperties properties;
-
-    /**
-     * 创建bucket
-     * 
-     * @param bucketName bucket名称
-     */
-    @Override
-    public void createBucket(String bucketName) {
-        FileUtil.mkdir(properties.getLocal().getBasePath() + FileUtil.FILE_SEPARATOR + bucketName);
-    }
-
-    /**
-     * 获取全部bucket
-     * <p>
-     * <p>
-     * API Documentation</a>
-     */
-    @Override
-    public List<Bucket> getAllBuckets() {
-        return Arrays.stream(FileUtil.ls(properties.getLocal().getBasePath())).filter(FileUtil::isDirectory)
-            .map(dir -> new Bucket(dir.getName())).collect(Collectors.toList());
-    }
-
-    /**
-     * @param bucketName bucket名称
-     * @see <a href= Documentation</a>
-     */
-    @Override
-    public void removeBucket(String bucketName) {
-        FileUtil.del(properties.getLocal().getBasePath() + FileUtil.FILE_SEPARATOR + bucketName);
-    }
-
-    /**
-     * 上传文件
-     * 
-     * @param bucketName bucket名称
-     * @param objectName 文件名称
-     * @param stream 文件流
-     * @param contextType 文件类型
-     */
-    @Override
-    public void putObject(String bucketName, String objectName, InputStream stream, String contextType) {
-        // 当 Bucket 不存在时创建
-        String dir = properties.getLocal().getBasePath() + FileUtil.FILE_SEPARATOR + bucketName;
-        if (!FileUtil.isDirectory(properties.getLocal().getBasePath() + FileUtil.FILE_SEPARATOR + bucketName)) {
-            createBucket(bucketName);
-        }
-
-        // 写入文件
-        File file = FileUtil.file(dir + FileUtil.FILE_SEPARATOR + objectName);
-        FileUtil.writeFromStream(stream, file);
-    }
-
-    /**
-     * 上传文件
-     * 
-     * @param bucketName bucket名称
-     * @param dir 文件夹名称
-     * @param objectName 文件名称
-     * @param stream 文件流
-     * @param contextType 文件类型
-     * @throws Exception
-     */
-    @Override
-    public void putObject(String bucketName, String dir, String objectName, InputStream stream, String contextType)
-        throws Exception {
-        if (StrUtil.isNotBlank(dir)) {
-            bucketName = bucketName + FileUtil.FILE_SEPARATOR + dir;
-        }
-        putObject(bucketName, objectName, stream, contextType);
-    }
-
-    /**
-     * 获取文件
-     * 
-     * @param bucketName bucket名称
-     * @param objectName 文件名称
-     * @return 二进制流 API Documentation</a>
-     */
-    @Override
-    @SneakyThrows
-    public S3Object getObject(String bucketName, String objectName) {
-        String dir = properties.getLocal().getBasePath() + FileUtil.FILE_SEPARATOR + bucketName;
-        S3Object s3Object = new S3Object();
-        s3Object.setObjectContent(FileUtil.getInputStream(dir + FileUtil.FILE_SEPARATOR + objectName));
-        return s3Object;
-    }
-
-    /**
-     * 获取文件外链
-     *
-     * @param bucketName 桶名称
-     * @param objectName 文件名称
-     * @param expires 有效期
-     * @return 外链接
-     */
-    @Override
-    public String getObjectURL(String bucketName, String objectName, Integer expires) {
-        return null;
-    }
-
-    /**
-     * 获取文件
-     * 
-     * @param bucketName bucket名称
-     * @param dir 文件夹名称
-     * @param objectName 文件名称
-     * @return 二进制流 API Documentation</a>
-     */
-    @Override
-    public S3Object getObject(String bucketName, String dir, String objectName) {
-        if (StrUtil.isNotBlank(dir)) {
-            bucketName = bucketName + FileUtil.FILE_SEPARATOR + dir;
-        }
-        return getObject(bucketName, objectName);
-    }
-
-    /**
-     * @param bucketName
-     * @param objectName
-     * @throws Exception
-     */
-    @Override
-    public void removeObject(String bucketName, String objectName) throws Exception {
-        String dir = properties.getLocal().getBasePath() + FileUtil.FILE_SEPARATOR + bucketName;
-        FileUtil.del(dir + FileUtil.FILE_SEPARATOR + objectName);
-    }
-
-    /**
-     * 上传文件
-     * 
-     * @param bucketName bucket名称
-     * @param objectName 文件名称
-     * @param stream 文件流
-     * @throws Exception
-     */
-    @Override
-    public void putObject(String bucketName, String objectName, InputStream stream) throws Exception {
-        putObject(bucketName, objectName, stream, null);
-    }
-
-    /**
-     * 根据文件前置查询文件
-     * 
-     * @param bucketName bucket名称
-     * @param prefix 前缀
-     * @param recursive 是否递归查询
-     * @return S3ObjectSummary 列表
-     * @see <a href="http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjects">AWS API Documentation</a>
-     */
-    @Override
-    public List<S3ObjectSummary> getAllObjectsByPrefix(String bucketName, String prefix, boolean recursive) {
-        String dir = properties.getLocal().getBasePath() + FileUtil.FILE_SEPARATOR + bucketName;
-
-        return Arrays.stream(FileUtil.ls(dir)).filter(file -> file.getName().startsWith(prefix)).map(file -> {
-            S3ObjectSummary summary = new S3ObjectSummary();
-            summary.setKey(file.getName());
-            return new S3ObjectSummary();
-        }).collect(Collectors.toList());
-    }
-
-}

+ 33 - 0
easier-common/easier-common-oss/src/main/java/com/yaoyicloud/easier/common/file/oss/http/OssEndpoint.java

@@ -1,6 +1,9 @@
 package com.yaoyicloud.easier.common.file.oss.http;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.InputStream;
+import java.nio.file.Files;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -13,6 +16,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
@@ -90,6 +94,35 @@ public class OssEndpoint {
 
     }
 
+    /**
+     * 通过文件路径上传(后端读取服务器本地文件)
+     */
+    @SneakyThrows
+    @PostMapping("/object/path/{bucketName}")
+    public S3Object createObjectByPath(
+        @RequestParam("filePath") String filePath, // 接收本地文件路径参数
+        @PathVariable String bucketName) {
+
+        // 校验文件路径是否有效
+        File localFile = new File(filePath);
+        if (!localFile.exists() || !localFile.isFile()) {
+            throw new IllegalArgumentException("本地文件不存在或路径错误: " + filePath);
+        }
+        String objectName = localFile.getName();
+        // 读取本地文件并上传
+        try (InputStream inputStream = new FileInputStream(localFile)) {
+            // 自动探测文件类型
+            String contentType = Files.probeContentType(localFile.toPath());
+            template.putObject(
+                bucketName,
+                objectName,
+                inputStream,
+                localFile.length(),
+                contentType);
+        }
+        return template.getObjectInfo(bucketName, objectName);
+    }
+
     @SneakyThrows
     @GetMapping("/object/{bucketName}/{objectName}")
     public List<S3ObjectSummary> filterObject(@PathVariable String bucketName, @PathVariable String objectName) {

+ 9 - 3
easier-report-biz/src/main/java/com/yaoyicloud/config/SessionInterceptor.java

@@ -11,11 +11,17 @@ import java.util.concurrent.ConcurrentHashMap;
 public class SessionInterceptor implements HandlerInterceptor {
 
     public static final Map<String, String> SESSION_MAP = new ConcurrentHashMap<>();
-
+    private static final String TARGET_PATH = "/report/";
     @Override
     public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
-        @NonNull Object handler)
-        throws Exception {
+        @NonNull Object handler) throws Exception {
+
+        String requestUri = request.getRequestURI();
+
+        // 判断是否是目标路径,如果不是则直接放行
+        if (!requestUri.contains(TARGET_PATH)) {
+            return true;
+        }
         String relationId = request.getHeader("relationId");
         String mysession = request.getHeader("X-Session-Id");
         if (mysession == null) {

+ 0 - 3
easier-report-biz/src/main/resources/application.yml

@@ -85,9 +85,6 @@ mybatis-plus-join:
 # 文件系统
 file:
   bucket-name: render-12
-  local:
-    enable: true
-    basePath: D:/tmp
   oss:
     info: true
     enable: true