Browse Source

add getPresignedUrl

xiewj 5 months ago
parent
commit
f36161f195

+ 10 - 1
4dkankan-utils-filestorage/src/main/java/com/fdkankan/filestorage/aliyun/AliyunOssTemplate.java

@@ -13,6 +13,7 @@ import com.fdkankan.filestorage.Consumer;
 import com.fdkankan.filestorage.InnerUtils;
 import com.fdkankan.filestorage.FileStorageTemplate;
 import com.fdkankan.filestorage.properties.AliyunOssProperties;
+import com.fdkankan.filestorage.util.DomainUtil;
 import lombok.Getter;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -24,6 +25,7 @@ import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
 
 import java.io.*;
+import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
@@ -31,6 +33,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 
@@ -468,7 +472,12 @@ public class AliyunOssTemplate implements FileStorageTemplate {
         GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucket, key);
         generatePresignedUrlRequest.setMethod(HttpMethod.PUT);
         generatePresignedUrlRequest.setExpiration(expiration);
-        return ossClient.generatePresignedUrl(generatePresignedUrlRequest);
+        String uri = ossClient.generatePresignedUrl(generatePresignedUrlRequest).toString();
+        try {
+            return new URL(DomainUtil.replaceDomain(uri,ossProperties.getHostByBucket(bucket)));
+        } catch (MalformedURLException e) {
+            throw new RuntimeException(e);
+        }
     }
     @Override
     public URL getPresignedUrl(String key) {

+ 8 - 1
4dkankan-utils-filestorage/src/main/java/com/fdkankan/filestorage/aws/AwsTemplate.java

@@ -16,6 +16,7 @@ import com.fdkankan.filestorage.Consumer;
 import com.fdkankan.filestorage.InnerUtils;
 import com.fdkankan.filestorage.FileStorageTemplate;
 import com.fdkankan.filestorage.properties.AwsProperties;
+import com.fdkankan.filestorage.util.DomainUtil;
 import lombok.Getter;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -25,6 +26,7 @@ import org.springframework.util.Base64Utils;
 import org.springframework.util.ObjectUtils;
 
 import java.io.*;
+import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
@@ -538,7 +540,12 @@ public class AwsTemplate implements FileStorageTemplate {
         expiration.setTime(expTimeMillis);
         GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucket, key)
                 .withMethod(HttpMethod.PUT).withExpiration(expiration);
-        return amazonS3Client.generatePresignedUrl(generatePresignedUrlRequest);
+        String uri = amazonS3Client.generatePresignedUrl(generatePresignedUrlRequest).toString();
+        try {
+            return new URL(DomainUtil.replaceDomain(uri,awsProperties.getHostByBucket(bucket)));
+        } catch (MalformedURLException e) {
+            throw new RuntimeException(e);
+        }
     }
     @Override
     public URL getPresignedUrl(String key) {

+ 45 - 0
4dkankan-utils-filestorage/src/main/java/com/fdkankan/filestorage/util/DomainUtil.java

@@ -0,0 +1,45 @@
+package com.fdkankan.filestorage.util;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Xiewj
+ * @date 2025/3/11
+ */
+public class DomainUtil {
+    // 定义一个方法用于替换文本中的域名
+    public static String replaceDomain(String url, String newDomain) {
+        // 正则表达式用于匹配URL中的域名部分(包括可能的协议部分)
+        String patternString = "(https?://)[\\w.-]+";
+        Pattern pattern = Pattern.compile(patternString);
+        Matcher matcher = pattern.matcher(url);
+
+        // 使用新域名进行替换
+        StringBuffer result = new StringBuffer();
+        while (matcher.find()) {
+            // 检查新域名是否已包含协议
+            if (newDomain.startsWith("http://") || newDomain.startsWith("https://")) {
+                // 如果新域名已经包含协议,则直接替换整个匹配的部分
+                matcher.appendReplacement(result, newDomain);
+            } else {
+                // 如果新域名不包含协议,则仅替换域名部分
+                matcher.appendReplacement(result, matcher.group(1) + newDomain);
+            }
+        }
+        matcher.appendTail(result);
+
+        return result.toString();
+    }
+
+    public static void main(String[] args) {
+        // 测试用例
+        String originalUrl = "https://laser-data.oss-cn-shenzhen.aliyuncs.com/testdata/SG-t-nlpWGOCYxCT/temp/model/1899294769733570560.ply?Expires=1741690934&OSSAccessKeyId=LTAI5tJwboCj3r4vUNkSmbyX&Signature=7PdIUcsuJhNwSVbMX0RpWEVcpqk%3D";
+        String newDomainWithProtocol = "https://aaa.bbb.com"; // 新域名包含协议
+        System.out.println("原始URL: " + originalUrl);
+
+        // 替换域名后的URL
+        String replacedUrl = replaceDomain(originalUrl, newDomainWithProtocol);
+        System.out.println("替换后的URL: " + replacedUrl);
+    }
+}

+ 1 - 1
4dkankan-utils-reg/pom.xml

@@ -12,7 +12,7 @@
     <artifactId>4dkankan-utils-reg</artifactId>
 
     <properties>
-        <fastjson.version>2.0.6</fastjson.version>
+        <fastjson.version>2.0.53</fastjson.version>
         <hutool.version>5.8.6</hutool.version>
     </properties>
 

File diff suppressed because it is too large
+ 5 - 4
4dkankan-utils-reg/src/main/java/com/fdkankan/reg/RegCodeUtil.java


+ 4 - 0
4dkankan-utils-reg/src/main/java/com/fdkankan/reg/dto/CamRegDto.java

@@ -1,5 +1,6 @@
 package com.fdkankan.reg.dto;
 
+import com.alibaba.fastjson2.annotation.JSONField;
 import lombok.Data;
 
 /**
@@ -10,8 +11,11 @@ public class CamRegDto {
      /**
      * {"SN": "SN000001", "TOSN": "", "OPTION": "ADD"}
      **/
+    @JSONField(name = "SN")
     private String sn;
+    @JSONField(name = "TOSN")
     private String toSn;
+    @JSONField(name = "CAMERATYPE")
     private Integer cameraType; // 1,看看,9看见,10深时,11深光
 
 }

+ 6 - 0
4dkankan-utils-reg/src/main/java/com/fdkankan/reg/dto/CamRegSDto.java

@@ -1,6 +1,8 @@
 package com.fdkankan.reg.dto;
 
+import com.alibaba.fastjson2.annotation.JSONField;
 import com.fdkankan.reg.EnvType;
+import lombok.Builder;
 import lombok.Data;
 
 import java.util.List;
@@ -10,9 +12,13 @@ import java.util.List;
  */
 @Data
 public class CamRegSDto {
+    @JSONField(name = "MACHINECODE")
     private String machineCode;
+    @JSONField(name = "TIMESTAMP")
     private Long timestamp=System.currentTimeMillis();
+    @JSONField(name = "ENV")
     private String env;
+    @JSONField(name = "CAMREGS")
     List<CamRegDto> camRegs;
 
 }