From a60e866f9d30de8ed50d3cd01c3979dfccb6d94b Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期五, 17 十月 2025 09:23:43 +0800
Subject: [PATCH] Merge branch 'dev' into user_action

---
 framework/src/main/java/cn/lili/utils/TencentCdnUtil.java |   78 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+), 0 deletions(-)

diff --git a/framework/src/main/java/cn/lili/utils/TencentCdnUtil.java b/framework/src/main/java/cn/lili/utils/TencentCdnUtil.java
new file mode 100644
index 0000000..de2653e
--- /dev/null
+++ b/framework/src/main/java/cn/lili/utils/TencentCdnUtil.java
@@ -0,0 +1,78 @@
+package cn.lili.utils;
+
+import cn.lili.cos.CDNConfigProperty;
+import com.tencentcloudapi.cdn.v20180606.CdnClient;
+import com.tencentcloudapi.cdn.v20180606.models.DescribePushTasksRequest;
+import com.tencentcloudapi.cdn.v20180606.models.DescribePushTasksResponse;
+import com.tencentcloudapi.cdn.v20180606.models.PushUrlsCacheRequest;
+import com.tencentcloudapi.cdn.v20180606.models.PushUrlsCacheResponse;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class TencentCdnUtil {
+    private final CDNConfigProperty cdnConfigProperty;
+
+    public void pushUrlsCache(String[] urls) {
+        try {
+            // 棰勫鐞哢RLs锛屾坊鍔燙DN鍩熷悕
+            String[] processedUrls = processUrlsWithCdnDomain(urls);
+
+            log.info("cdn閾炬帴锛歿}", Arrays.toString(processedUrls));
+            // 涓轰簡淇濇姢瀵嗛挜瀹夊叏锛屽缓璁皢瀵嗛挜璁剧疆鍦ㄧ幆澧冨彉閲忎腑鎴栬�呴厤缃枃浠朵腑锛岃鍙傝�冩湰鏂囧嚟璇佺鐞嗙珷鑺傘��
+            // 纭紪鐮佸瘑閽ュ埌浠g爜涓湁鍙兘闅忎唬鐮佹硠闇茶�屾毚闇诧紝鏈夊畨鍏ㄩ殣鎮o紝骞朵笉鎺ㄨ崘銆�
+            Credential cred = new Credential(cdnConfigProperty.getSecretId(), cdnConfigProperty.getSecretKey());
+            CdnClient client = new CdnClient(cred, "ap-guangzhou");
+
+            PushUrlsCacheRequest req = new PushUrlsCacheRequest();
+            req.setUrls(processedUrls);
+
+            PushUrlsCacheResponse resp = client.PushUrlsCache(req);
+
+            log.info("cdn棰勭儹杩斿洖锛歿}", client.gson.toJson(resp));
+
+        } catch (TencentCloudSDKException e) {
+            log.warn("cdn棰勭儹澶辫触锛歿}", e.toString());
+        }
+    }
+
+    /**
+     * 澶勭悊URL鍒楄〃锛屽湪姣忎釜URL鍓嶆坊鍔燙DN鍩熷悕
+     *
+     * @param urls 鍘熷URL鍒楄〃
+     * @return 娣诲姞浜咰DN鍩熷悕鐨勫畬鏁碪RL鍒楄〃
+     */
+    public String[] processUrlsWithCdnDomain(String[] urls) {
+        if (urls == null || urls.length == 0) {
+            return urls;
+        }
+
+        String cdnDomain = cdnConfigProperty.getCdnDomain();
+        if (cdnDomain == null || cdnDomain.isEmpty()) {
+            return urls;
+        }
+
+        String[] processedUrls = new String[urls.length];
+        for (int i = 0; i < urls.length; i++) {
+            // 濡傛灉URL宸茬粡鍖呭惈鍗忚锛屽垯鐩存帴鎷兼帴
+            if (urls[i].startsWith("http://") || urls[i].startsWith("https://")) {
+                processedUrls[i] = urls[i];
+            } else {
+                // 纭繚cdnDomain鏈熬娌℃湁鏂滄潬锛寀rls寮�澶存病鏈夋枩鏉�
+                String domain = cdnDomain.endsWith("/") ? cdnDomain.substring(0, cdnDomain.length() - 1) : cdnDomain;
+                String path = urls[i].startsWith("/") ? urls[i].substring(1) : urls[i];
+                processedUrls[i] = domain + "/" + path;
+            }
+        }
+
+        return processedUrls;
+    }
+
+}

--
Gitblit v1.8.0