From 37829fe78f8f19b054c20f3cf6478551f5aadb8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BB=BA=E6=98=8E=20=E6=B2=88?= <2431685932@qq.com> Date: Fri, 5 Jul 2024 16:01:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ali=E8=8E=B7=E5=8F=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SchisandraOssAliController.java | 22 +++++- .../oss/core/ali/AliOssClient.java | 78 ++++++++++++++++++- .../oss/core/ali/AliOssConfiguration.java | 20 ++++- 3 files changed, 115 insertions(+), 5 deletions(-) diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssAliController.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssAliController.java index 4db0104..ece1ac2 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssAliController.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssAliController.java @@ -123,6 +123,24 @@ public class SchisandraOssAliController { } + /** + * @description: 获取文件目录信息 + * @param: [target, userId, dirName] + * @return: com.schisandra.oss.common.entity.Result + * @date: 2024/7/5 13:55 + */ + @GetMapping("listAliDir") + public Result listAliDir(@RequestParam String userId,@RequestParam String bucket,@RequestParam String prefix) throws Exception { + Preconditions.checkNotNull(userId, "不能为空"); + AliOssClient bean = SpringUtil.getBean(userId); + bean.getAliOssConfig().setBucketName(bucket); + if(prefix==null) + prefix=""; + return Result.ok(bean.listAliInfo(bucket,prefix)); + } + + + /** * 查找bucket * @param userId @@ -183,8 +201,8 @@ public class SchisandraOssAliController { * @return: void * @date: 2024/6/26 14:34 */ - @PostMapping("uploadMinioFile") - public Result uploadMinioFile(@RequestParam String userId, @RequestParam MultipartFile file, @RequestParam String fileName, @RequestParam String bucket) throws IOException { + @PostMapping("uploadAliFile") + public Result uploadAliFile(@RequestParam String userId, @RequestParam MultipartFile file, @RequestParam String fileName, @RequestParam String bucket) throws IOException { Preconditions.checkNotNull(userId, "不能为空"); Preconditions.checkNotNull(fileName, "不能为空"); Preconditions.checkNotNull(bucket, "不能为空"); diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssClient.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssClient.java index 8a46c14..7c7c45b 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssClient.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssClient.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.io.unit.DataSizeUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; @@ -31,6 +32,7 @@ import org.springframework.stereotype.Component; import java.io.File; import java.io.InputStream; import java.io.OutputStream; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -52,7 +54,6 @@ public class AliOssClient implements StandardOssClient { private OSS oss; private AliOssConfig aliOssConfig; - public List selectAllBucket() { List buckets = oss.listBuckets(); List names = new ArrayList<>(); @@ -62,6 +63,80 @@ public class AliOssClient implements StandardOssClient { return names; } + /** + * @description: 获取目录文件信息 + * @param: [bucket, dirName] + * @return: java.util.List + * @date: 2024/7/5 13:34 + */ + public String transfer(String before){ + SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); + Date date = new Date(); + try{ + date = sdf.parse(before); + }catch (Exception e){ + e.printStackTrace(); + } + String formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); + + return formatStr; + } + + public List listAliInfo(String bucket, String prefix){ + // 列举文件。如果不设置Prefix,则列举存储空间下的所有文件。如果设置Prefix,则列举包含指定前缀的文件。 + ObjectListing objectListing = oss.listObjects(bucket, prefix); + List sums = objectListing.getObjectSummaries(); + List infos = new ArrayList<>(); + if(prefix == ""){ + for(OSSObjectSummary objectSummary : sums){ + OssInfo info = new OssInfo(); + + String[] split_path = objectSummary.getKey().split("/"); + if(split_path.length>=2) + continue; + + String[] split_path_again = split_path[0].split("\\."); + if(split_path_again.length>=2) { + info.setIsDir(false); + }else{ + info.setIsDir(true); + } + info.setName(split_path[0]); + info.setPath(objectSummary.getKey()); + info.setLength(DataSizeUtil.format(objectSummary.getSize())); + + String formatStr = transfer(String.valueOf(objectSummary.getLastModified())); + info.setLastUpdateTime(formatStr); + infos.add(info); + } + + }else{ + for(OSSObjectSummary objectSummary : sums){ + OssInfo info = new OssInfo(); + + int x = prefix.split("/").length; + String[] split_path = objectSummary.getKey().split("/"); + if(split_path.length>=x+2) + continue; + String[] split_path_again = split_path[split_path.length-1].split("\\."); + if(split_path_again.length>=2){ + info.setIsDir(false); + }else{ + info.setIsDir(true); + } + info.setName(split_path[split_path.length-1]); + info.setPath(objectSummary.getKey()); + info.setLength(DataSizeUtil.format(objectSummary.getSize())); + + String formatStr = transfer(String.valueOf(objectSummary.getLastModified())); + info.setLastUpdateTime(formatStr); + infos.add(info); + } + } + return infos; + } + + public String createBucket(String bucketName) { try { @@ -271,5 +346,4 @@ public class AliOssClient implements StandardOssClient { } return ossInfo; } - } diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssConfiguration.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssConfiguration.java index e2474b3..c160121 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssConfiguration.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/ali/AliOssConfiguration.java @@ -84,9 +84,27 @@ public class AliOssConfiguration { return new AliOssClient(ossClient(aliOssConfig), aliOssConfig); } +// public OSS ossClient(AliOssConfig aliOssConfig) { +// return new OSSClientBuilder().build(aliOssConfig.getEndpoint(), +// aliOssConfig.getAccessKeyId(), +// aliOssConfig.getAccessKeySecret()); +// } public OSS ossClient(AliOssConfig aliOssConfig) { + String securityToken = aliOssConfig.getSecurityToken(); + AliOssClientConfig clientConfiguration = aliOssConfig.getClientConfig(); + if (ObjectUtil.isEmpty(securityToken) && ObjectUtil.isNotEmpty(clientConfiguration)) { + return new OSSClientBuilder().build(aliOssConfig.getEndpoint(), + aliOssConfig.getAccessKeyId(), + aliOssConfig.getAccessKeySecret(), clientConfiguration.toClientConfig()); + } + if (ObjectUtil.isNotEmpty(securityToken) && ObjectUtil.isEmpty(clientConfiguration)) { + return new OSSClientBuilder().build(aliOssConfig.getEndpoint(), + aliOssConfig.getAccessKeyId(), + aliOssConfig.getAccessKeySecret(), securityToken); + } return new OSSClientBuilder().build(aliOssConfig.getEndpoint(), aliOssConfig.getAccessKeyId(), - aliOssConfig.getAccessKeySecret()); + aliOssConfig.getAccessKeySecret(), securityToken, + Optional.ofNullable(clientConfiguration).orElse(new AliOssClientConfig()).toClientConfig()); } }