|
@@ -4,11 +4,8 @@ import cn.hutool.core.io.IoUtil;
|
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
|
import com.aliyun.oss.OSS;
|
|
import com.aliyun.oss.OSS;
|
|
|
import com.aliyun.oss.OSSClientBuilder;
|
|
import com.aliyun.oss.OSSClientBuilder;
|
|
|
-import com.aliyun.oss.model.OSSObject;
|
|
|
|
|
-import com.aliyun.oss.model.PutObjectRequest;
|
|
|
|
|
-import com.aliyun.oss.model.PutObjectResult;
|
|
|
|
|
-import com.aliyun.sts20150401.models.AssumeRoleResponse;
|
|
|
|
|
-import com.aliyun.tea.TeaException;
|
|
|
|
|
|
|
+import com.aliyun.oss.common.utils.BinaryUtil;
|
|
|
|
|
+import com.aliyun.oss.model.*;
|
|
|
import com.kym.common.config.OssConfig;
|
|
import com.kym.common.config.OssConfig;
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -17,6 +14,10 @@ import java.io.File;
|
|
|
import java.io.InputStream;
|
|
import java.io.InputStream;
|
|
|
import java.io.OutputStream;
|
|
import java.io.OutputStream;
|
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Files;
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
|
|
+import java.util.Date;
|
|
|
|
|
+import java.util.LinkedHashMap;
|
|
|
|
|
+import java.util.Map;
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -105,43 +106,84 @@ public class OssUtil {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 使用AK&SK初始化账号Client
|
|
* 使用AK&SK初始化账号Client
|
|
|
|
|
+ *
|
|
|
* @param accessKeyId
|
|
* @param accessKeyId
|
|
|
* @param accessKeySecret
|
|
* @param accessKeySecret
|
|
|
* @return Client
|
|
* @return Client
|
|
|
* @throws Exception
|
|
* @throws Exception
|
|
|
*/
|
|
*/
|
|
|
- public static com.aliyun.sts20150401.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
|
|
|
|
|
- com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
|
|
|
|
|
- // 必填,您的 AccessKey ID
|
|
|
|
|
- .setAccessKeyId(accessKeyId)
|
|
|
|
|
- // 必填,您的 AccessKey Secret
|
|
|
|
|
- .setAccessKeySecret(accessKeySecret);
|
|
|
|
|
- // Endpoint 请参考 https://api.aliyun.com/product/Sts
|
|
|
|
|
- config.endpoint = "sts.cn-shenzhen.aliyuncs.com";
|
|
|
|
|
- return new com.aliyun.sts20150401.Client(config);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public static AssumeRoleResponse getSts() throws Exception {
|
|
|
|
|
- // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
|
|
|
|
|
- // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
|
|
|
|
|
- com.aliyun.sts20150401.Client client = createClient("LTAI5tEPpmhZGDRb6sgqhiA2", "HjlRw844NVP894jAzZna45Vns6axes");
|
|
|
|
|
- com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest()
|
|
|
|
|
- .setDurationSeconds(3600L)
|
|
|
|
|
-// .setPolicy("AliyunOSSFullAccess")
|
|
|
|
|
- .setRoleArn("acs:ram::1757940634296846:role/aliyunosstokengeneratorrole")
|
|
|
|
|
- .setRoleSessionName("AliyunOSSTokenGeneratorRole");
|
|
|
|
|
|
|
+// public static com.aliyun.sts20150401.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
|
|
|
|
|
+// com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
|
|
|
|
|
+// // 必填,您的 AccessKey ID
|
|
|
|
|
+// .setAccessKeyId(accessKeyId)
|
|
|
|
|
+// // 必填,您的 AccessKey Secret
|
|
|
|
|
+// .setAccessKeySecret(accessKeySecret);
|
|
|
|
|
+// // Endpoint 请参考 https://api.aliyun.com/product/Sts
|
|
|
|
|
+// config.endpoint = "sts.cn-shenzhen.aliyuncs.com";
|
|
|
|
|
+// return new com.aliyun.sts20150401.Client(config);
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// public static AssumeRoleResponse getSts() throws Exception {
|
|
|
|
|
+// // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
|
|
|
|
|
+// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
|
|
|
|
|
+// com.aliyun.sts20150401.Client client = createClient("LTAI5tEPpmhZGDRb6sgqhiA2", "HjlRw844NVP894jAzZna45Vns6axes");
|
|
|
|
|
+// com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest()
|
|
|
|
|
+// .setDurationSeconds(3600L)
|
|
|
|
|
+//// .setPolicy("AliyunOSSFullAccess")
|
|
|
|
|
+// .setRoleArn("acs:ram::1757940634296846:role/aliyunosstokengeneratorrole")
|
|
|
|
|
+// .setRoleSessionName("AliyunOSSTokenGeneratorRole");
|
|
|
|
|
+// try {
|
|
|
|
|
+// // 复制代码运行请自行打印 API 的返回值
|
|
|
|
|
+// return client.assumeRoleWithOptions(assumeRoleRequest, new com.aliyun.teautil.models.RuntimeOptions());
|
|
|
|
|
+// } catch (TeaException error) {
|
|
|
|
|
+// // 如有需要,请打印 error
|
|
|
|
|
+// com.aliyun.teautil.Common.assertAsString(error.message);
|
|
|
|
|
+// } catch (Exception _error) {
|
|
|
|
|
+// TeaException error = new TeaException(_error.getMessage(), _error);
|
|
|
|
|
+// // 如有需要,请打印 error
|
|
|
|
|
+// com.aliyun.teautil.Common.assertAsString(error.message);
|
|
|
|
|
+// }
|
|
|
|
|
+// return null;
|
|
|
|
|
+// }
|
|
|
|
|
+ public static Map<String,String> getSts() {
|
|
|
|
|
+ OssConfig ossConfig = SpringUtil.getBean(OssConfig.class);
|
|
|
|
|
+ OSS ossClient = getClient();
|
|
|
|
|
+ // host的格式为 bucketname.endpoint
|
|
|
|
|
+ String host = "https://" + bucket + "." + ossConfig.getEndpoint();
|
|
|
|
|
+ //上传的目录 以每天的日期为单位分目录
|
|
|
|
|
+ String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
|
|
|
|
|
+// String dir = format + "/";
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, String> respMap = null;
|
|
|
try {
|
|
try {
|
|
|
- // 复制代码运行请自行打印 API 的返回值
|
|
|
|
|
- return client.assumeRoleWithOptions(assumeRoleRequest, new com.aliyun.teautil.models.RuntimeOptions());
|
|
|
|
|
- } catch (TeaException error) {
|
|
|
|
|
- // 如有需要,请打印 error
|
|
|
|
|
- com.aliyun.teautil.Common.assertAsString(error.message);
|
|
|
|
|
- } catch (Exception _error) {
|
|
|
|
|
- TeaException error = new TeaException(_error.getMessage(), _error);
|
|
|
|
|
- // 如有需要,请打印 error
|
|
|
|
|
- com.aliyun.teautil.Common.assertAsString(error.message);
|
|
|
|
|
|
|
+ long expireTime = 30;
|
|
|
|
|
+ long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
|
|
|
|
|
+ Date expiration = new Date(expireEndTime);
|
|
|
|
|
+ // PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
|
|
|
|
|
+ PolicyConditions policyConds = new PolicyConditions();
|
|
|
|
|
+ policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 2 * 1024 * 1024);
|
|
|
|
|
+// policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
|
|
|
|
|
+
|
|
|
|
|
+ String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
|
|
|
|
|
+ byte[] binaryData = postPolicy.getBytes("utf-8");
|
|
|
|
|
+ String encodedPolicy = BinaryUtil.toBase64String(binaryData);
|
|
|
|
|
+ String postSignature = ossClient.calculatePostSignature(postPolicy);
|
|
|
|
|
+
|
|
|
|
|
+ respMap = new LinkedHashMap<String, String>();
|
|
|
|
|
+ respMap.put("accesskeyId", ossConfig.getKeyId());
|
|
|
|
|
+ respMap.put("policy", encodedPolicy);
|
|
|
|
|
+ respMap.put("signature", postSignature);
|
|
|
|
|
+// respMap.put("dir", dir);
|
|
|
|
|
+ respMap.put("host", host);
|
|
|
|
|
+ respMap.put("expire", String.valueOf(expireEndTime / 1000));
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ System.out.println(e.getMessage());
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ ossClient.shutdown();
|
|
|
}
|
|
}
|
|
|
- return null;
|
|
|
|
|
|
|
+ return respMap;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
}
|
|
}
|