From 24681c81c09022f584a57006f2534b5f74723414 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 30 六月 2026 09:27:31 +0800
Subject: [PATCH] 初始化项目

---
 yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java b/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java
index 981971b..8a3e2cd 100644
--- a/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java
+++ b/yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/s3/S3FileClientTest.java
@@ -9,10 +9,67 @@
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 @SuppressWarnings("resource")
 public class S3FileClientTest {
 
     @Test
+    public void testPresignGetUrl_publicAccess_encodeUrlPath() {
+        // 鍑嗗鍙傛暟
+        S3FileClientConfig config = new S3FileClientConfig();
+        config.setDomain("https://static.iocoder.cn");
+        config.setEnablePublicAccess(true);
+        S3FileClient client = new S3FileClient(0L, config);
+
+        // 璋冪敤
+        String result = client.presignGetUrl("avatar/涓枃 100%+鏂囦欢.jpg", 300);
+
+        // 鏂█
+        assertEquals("https://static.iocoder.cn/avatar/%E4%B8%AD%E6%96%87%20100%25+%E6%96%87%E4%BB%B6.jpg", result);
+    }
+
+    @Test
+    public void testPresignGetUrl_publicAccess_decodeDomainUrl() {
+        // 鍑嗗鍙傛暟
+        S3FileClientConfig config = new S3FileClientConfig();
+        config.setDomain("https://static.iocoder.cn");
+        config.setEnablePublicAccess(true);
+        S3FileClient client = new S3FileClient(0L, config);
+
+        // 璋冪敤
+        String result = client.presignGetUrl("https://static.iocoder.cn/avatar/%E4%B8%AD%E6%96%87%20100%25+%E6%96%87%E4%BB%B6.jpg?token=1", 300);
+
+        // 鏂█
+        assertEquals("https://static.iocoder.cn/avatar/%E4%B8%AD%E6%96%87%20100%25+%E6%96%87%E4%BB%B6.jpg", result);
+    }
+
+    @Test
+    public void testPresignGetUrl_privateAccess_rawPath() {
+        // 鍑嗗鍙傛暟
+        S3FileClientConfig config = new S3FileClientConfig();
+        config.setAccessKey("admin");
+        config.setAccessSecret("password");
+        config.setBucket("yudao");
+        config.setDomain("http://127.0.0.1:9000/yudao");
+        config.setEndpoint("http://127.0.0.1:9000");
+        config.setEnablePathStyleAccess(true);
+        config.setEnablePublicAccess(false);
+        S3FileClient client = new S3FileClient(0L, config);
+        client.init();
+
+        // 璋冪敤
+        String result = client.presignGetUrl("avatar/涓枃 100%+鏂囦欢.jpg", 300);
+
+        // 鏂█
+        assertTrue(result.contains("/yudao/avatar/%E4%B8%AD%E6%96%87%20100%25"));
+        assertTrue(result.contains("%E6%96%87%E4%BB%B6.jpg"));
+        assertFalse(result.contains("%25E4%25B8%25AD"));
+    }
+
+    @Test
     @Disabled // MinIO锛屽鏋滆闆嗘垚娴嬭瘯锛屽彲浠ユ敞閲婃湰琛�
     public void testMinIO() throws Exception {
         S3FileClientConfig config = new S3FileClientConfig();

--
Gitblit v1.9.3