diff --git a/solon-cloud-file/aliyun-oss-solon-cloud-plugin/pom.xml b/solon-cloud-file/aliyun-oss-solon-cloud-plugin/pom.xml index e09d539b22c6e2cb64290df21df3b4672ec172f1..d34e86c3c67e3e9d5f5eb1ac11c3ad2b351b3a5d 100644 --- a/solon-cloud-file/aliyun-oss-solon-cloud-plugin/pom.xml +++ b/solon-cloud-file/aliyun-oss-solon-cloud-plugin/pom.xml @@ -40,4 +40,4 @@ - \ No newline at end of file + diff --git a/solon-cloud-file/aliyun-oss-solon-cloud-plugin/src/main/java/org/noear/solon/cloud/extend/aliyun/oss/service/CloudFileServiceOssImpl.java b/solon-cloud-file/aliyun-oss-solon-cloud-plugin/src/main/java/org/noear/solon/cloud/extend/aliyun/oss/service/CloudFileServiceOssImpl.java index 226ff6b2f6ab8826d5ffe98786f5ef292274e1fc..c073b5b0dcbd7b4ecd7306f15778e2164d36d7d1 100644 --- a/solon-cloud-file/aliyun-oss-solon-cloud-plugin/src/main/java/org/noear/solon/cloud/extend/aliyun/oss/service/CloudFileServiceOssImpl.java +++ b/solon-cloud-file/aliyun-oss-solon-cloud-plugin/src/main/java/org/noear/solon/cloud/extend/aliyun/oss/service/CloudFileServiceOssImpl.java @@ -26,6 +26,7 @@ import org.noear.solon.net.http.HttpUtils; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import java.net.URLEncoder; import java.time.Duration; import java.util.*; @@ -103,7 +104,25 @@ public class CloudFileServiceOssImpl implements CloudFileService { @Override public String getTempUrl(String bucket, String key, Duration duration) throws CloudFileException, UnsupportedOperationException { - throw new UnsupportedOperationException(); + if (Utils.isEmpty(bucket)) { + bucket = bucketDef; + } + + try { + long expires = System.currentTimeMillis() / 1000 + duration.getSeconds(); + + String objPath = "/" + bucket + "/" + key; + String url = buildUrl(bucket, key); + + String signData = buildSignData("GET", Long.toString(expires), objPath, null); + String signature = hmacSha1(signData, secretKey); + + String encodedSignature = URLEncoder.encode(signature, CHARSET_UTF8); + + return url + "?Expires=" + expires + "&OSSAccessKeyId=" + accessKey + "&Signature=" + encodedSignature; + } catch (Exception ex) { + throw new CloudFileException(ex); + } } @Override diff --git a/solon-cloud-file/aliyun-oss-solon-cloud-plugin/src/test/java/demo/DemoTest.java b/solon-cloud-file/aliyun-oss-solon-cloud-plugin/src/test/java/demo/DemoTest.java index a6887081d851728fac8baaaaa673de0e4ca67f22..25414e0f668fb925a6d2127a95d21ecfa2d2be9f 100644 --- a/solon-cloud-file/aliyun-oss-solon-cloud-plugin/src/test/java/demo/DemoTest.java +++ b/solon-cloud-file/aliyun-oss-solon-cloud-plugin/src/test/java/demo/DemoTest.java @@ -16,16 +16,15 @@ package demo; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.noear.solon.cloud.CloudClient; import org.noear.solon.cloud.model.Media; import org.noear.solon.core.handle.Result; -import org.noear.solon.test.SolonJUnit5Extension; import org.noear.solon.test.SolonTest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.time.Duration; /** * @author noear 2021/10/18 created @@ -60,4 +59,11 @@ public class DemoTest { System.out.println("times: " + (System.currentTimeMillis() - start)); } + + @Test + public void testGetTempUrl() { + CloudClient.file().put(key, media); + String url = CloudClient.file().getTempUrl(key, Duration.ofMinutes(10)); + System.out.println(url); + } }