From bd7d518efae560f347b69cd3122dbd60e34be25e Mon Sep 17 00:00:00 2001 From: Aasee <1600677504@qq.com> Date: Mon, 5 Aug 2024 10:55:43 +0800 Subject: [PATCH] =?UTF-8?q?:=E4=BC=98=E5=8C=96:=20=E7=AA=81=E7=A0=B41000?= =?UTF-8?q?=E7=89=87=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reactminiospring/util/MinioUtil.java | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/service/src/main/java/com/slice/reactminiospring/util/MinioUtil.java b/service/src/main/java/com/slice/reactminiospring/util/MinioUtil.java index c662fbf..845f733 100644 --- a/service/src/main/java/com/slice/reactminiospring/util/MinioUtil.java +++ b/service/src/main/java/com/slice/reactminiospring/util/MinioUtil.java @@ -13,6 +13,7 @@ import io.minio.http.Method; import io.minio.messages.Part; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -51,8 +52,8 @@ public class MinioUtil { */ @SneakyThrows public List getListParts(String object, String uploadId) { - ListPartsResponse partResult = customMinioClient.listMultipart(minioConfigInfo.getBucket(), null, object, 1000, 0, uploadId, null, null); - return partResult.result().partList().stream() + List parts = getParts(object, uploadId); + return parts.stream() .map(Part::partNumber) .collect(Collectors.toList()); } @@ -154,12 +155,11 @@ public class MinioUtil { @SneakyThrows public boolean mergeMultipartUpload(String object, String uploadId) { log.info("通过 <{}-{}-{}> 合并<分片上传>数据", object, uploadId, minioConfigInfo.getBucket()); - //目前仅做了最大1000分片 - Part[] parts = new Part[1000]; - // 查询上传后的分片数据 - ListPartsResponse partResult = customMinioClient.listMultipart(minioConfigInfo.getBucket(), null, object, 1000, 0, uploadId, null, null); + // 获取所有分片 + List partsList = getParts(object, uploadId); + Part[] parts = new Part[partsList.size()]; int partNumber = 1; - for (Part part : partResult.result().partList()) { + for (Part part : partsList) { parts[partNumber - 1] = new Part(partNumber, part.etag()); partNumber++; } @@ -193,4 +193,23 @@ public class MinioUtil { .get(); } + + @NotNull + private List getParts(String object, String uploadId) throws Exception { + int partNumberMarker = 0; + boolean isTruncated = true; + List parts = new ArrayList<>(); + while(isTruncated){ + ListPartsResponse partResult = customMinioClient.listMultipart(minioConfigInfo.getBucket(), null, object, 1000, partNumberMarker, uploadId, null, null); + parts.addAll(partResult.result().partList()); + // 检查是否还有更多分片 + isTruncated = partResult.result().isTruncated(); + if (isTruncated) { + // 更新partNumberMarker以获取下一页的分片数据 + partNumberMarker = partResult.result().nextPartNumberMarker(); + } + } + return parts; + } + } -- Gitee