Explorar el Código

新增URL地址拼接工具方法

woody hace 1 año
padre
commit
90b5225756

+ 34 - 3
framework-base/src/main/java/com/chelvc/framework/base/util/HttpUtils.java

@@ -8,6 +8,8 @@ import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -34,6 +36,11 @@ public final class HttpUtils {
      */
     public static final String UNIFIED_RESPONSE_HEADER = "unified-response-body";
 
+    /**
+     * 资源分隔符匹配模式
+     */
+    private static final Pattern URI_SEPARATOR_PATTERN = Pattern.compile("/+");
+
     /**
      * 客户端主机地址请求头数组
      */
@@ -70,9 +77,9 @@ public final class HttpUtils {
     public static String getRequestURI(@NonNull HttpServletRequest request) {
         String uri = request.getRequestURI();
         if (StringUtils.isEmpty(uri)) {
-            return StringUtils.URI_ROOT;
-        } else if (uri.charAt(0) != StringUtils.URI_ROOT.charAt(0)) {
-            return StringUtils.URI_ROOT.concat(uri);
+            return StringUtils.URI_SEPARATOR;
+        } else if (uri.charAt(0) != StringUtils.URI_SEPARATOR.charAt(0)) {
+            return StringUtils.URI_SEPARATOR.concat(uri);
         }
         return uri;
     }
@@ -217,6 +224,30 @@ public final class HttpUtils {
         }
     }
 
+    /**
+     * URL地址拼接
+     *
+     * @param domain 域名
+     * @param uris   资源地址数组
+     * @return URL地址
+     */
+    public static String url(@NonNull String domain, @NonNull String... uris) {
+        if (uris == null || uris.length == 0) {
+            return domain;
+        }
+        Matcher matcher = URI_SEPARATOR_PATTERN.matcher(StringUtils.join(uris, StringUtils.URI_SEPARATOR));
+        String uri = matcher.replaceAll(StringUtils.URI_SEPARATOR);
+        if (domain.charAt(domain.length() - 1) == StringUtils.URI_SEPARATOR.charAt(0)) {
+            if (uri.charAt(0) == StringUtils.URI_SEPARATOR.charAt(0)) {
+                return domain.concat(uri.substring(1));
+            }
+            return domain.concat(uri);
+        } else if (uri.charAt(0) == StringUtils.URI_SEPARATOR.charAt(0)) {
+            return domain.concat(uri);
+        }
+        return domain.concat(StringUtils.URI_SEPARATOR).concat(uri);
+    }
+
     /**
      * 构建Http请求消息
      *

+ 2 - 2
framework-base/src/main/java/com/chelvc/framework/base/util/StringUtils.java

@@ -59,9 +59,9 @@ public final class StringUtils {
     public static final String[] EMPTY_ARRAY = new String[0];
 
     /**
-     * 资源根目录
+     * 资源分隔符
      */
-    public static final String URI_ROOT = "/";
+    public static final String URI_SEPARATOR = "/";
 
     /**
      * 表情符号正则表达式

+ 0 - 12
framework-upload/src/main/java/com/chelvc/framework/upload/UploadHandler.java

@@ -5,8 +5,6 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 
-import com.qcloud.cos.model.ObjectMetadata;
-
 /**
  * 文件上传操作接口
  *
@@ -41,16 +39,6 @@ public interface UploadHandler {
      */
     String upload(InputStream stream, String filename, long size);
 
-    /**
-     * 文件上传
-     *
-     * @param stream   文件流
-     * @param filename 文件名
-     * @param metadata 文件信息
-     * @return 文件访问地址
-     */
-    String upload(InputStream stream, String filename, ObjectMetadata metadata);
-
     /**
      * 图片上传
      *

+ 28 - 0
framework-upload/src/main/java/com/chelvc/framework/upload/config/StandardUploadProperties.java

@@ -0,0 +1,28 @@
+package com.chelvc.framework.upload.config;
+
+import lombok.Data;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 标准文件上传配置
+ *
+ * @author Woody
+ * @date 2023/5/6
+ */
+@Data
+@Configuration
+@ConfigurationProperties("platform.upload.standard")
+@ConditionalOnProperty(prefix = "platform.upload.standard", value = {"path", "domain"})
+public class StandardUploadProperties {
+    /**
+     * 文件存储路径
+     */
+    private String path;
+
+    /**
+     * 文件访问域名
+     */
+    private String domain;
+}

+ 1 - 1
framework-upload/src/main/java/com/chelvc/framework/upload/config/TencentUploadProperties.java

@@ -6,7 +6,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
 
 /**
- * 文件上传配置
+ * 腾讯云文件上传配置
  *
  * @author Woody
  * @date 2023/4/5

+ 64 - 0
framework-upload/src/main/java/com/chelvc/framework/upload/support/StandardUploadHandler.java

@@ -0,0 +1,64 @@
+package com.chelvc.framework.upload.support;
+
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.chelvc.framework.base.util.HttpUtils;
+import com.chelvc.framework.upload.UploadHandler;
+import com.chelvc.framework.upload.config.StandardUploadProperties;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.stereotype.Component;
+
+/**
+ * 文件上传标准实现
+ *
+ * @author Woody
+ * @date 2023/5/6
+ */
+@Slf4j
+@Component
+@ConditionalOnBean(StandardUploadProperties.class)
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class StandardUploadHandler implements UploadHandler {
+    private final StandardUploadProperties properties;
+
+    /**
+     * 将唯一标识转换成资源地址
+     *
+     * @param key 唯一标识
+     * @return 资源地址
+     */
+    private String key2uri(String key) {
+//        return String.format(
+//                "https://%s.cos.%s.myqcloud.com/%s",
+//                this.properties.getBucket(), this.properties.getRegion(), key
+//        );
+        return HttpUtils.url(this.properties.getDomain(), key);
+    }
+
+    @Override
+    public String upload(@NonNull File file) {
+        return null;
+    }
+
+    @Override
+    public String upload(@NonNull InputStream stream, @NonNull String filename) {
+        return null;
+    }
+
+    @Override
+    public String upload(@NonNull InputStream stream, @NonNull String filename, long size) {
+        return null;
+    }
+
+    @Override
+    public String upload(@NonNull BufferedImage image) throws IOException {
+        return null;
+    }
+}

+ 17 - 10
framework-upload/src/main/java/com/chelvc/framework/upload/support/TencentUploadHandler.java

@@ -48,6 +48,23 @@ public class TencentUploadHandler implements UploadHandler {
         );
     }
 
+    /**
+     * 文件上传
+     *
+     * @param stream   文件流
+     * @param filename 文件名
+     * @param metadata 文件信息
+     * @return 文件访问地址
+     */
+    private String upload(InputStream stream, String filename, ObjectMetadata metadata) {
+        if (log.isDebugEnabled()) {
+            log.debug("Uploading stream: {}", filename);
+        }
+        String key = FileUtils.generateUniqueName(filename);
+        this.client.putObject(this.properties.getBucket(), key, stream, metadata);
+        return this.key2uri(key);
+    }
+
     @Override
     public String upload(@NonNull File file) {
         if (log.isDebugEnabled()) {
@@ -70,16 +87,6 @@ public class TencentUploadHandler implements UploadHandler {
         return this.upload(stream, filename, metadata);
     }
 
-    @Override
-    public String upload(@NonNull InputStream stream, @NonNull String filename, @NonNull ObjectMetadata metadata) {
-        if (log.isDebugEnabled()) {
-            log.debug("Uploading stream: {}", filename);
-        }
-        String key = FileUtils.generateUniqueName(filename);
-        this.client.putObject(this.properties.getBucket(), key, stream, metadata);
-        return this.key2uri(key);
-    }
-
     @Override
     public String upload(@NonNull BufferedImage image) throws IOException {
         // 图片压缩