From aa83d449fba5f3d6ae808cb95fa51e9e1a68325f Mon Sep 17 00:00:00 2001 From: jiang Date: Wed, 16 Oct 2024 09:25:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/service/impl/OssServiceImpl.java | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/bonus-modules/bonus-file/src/main/java/com/bonus/file/service/impl/OssServiceImpl.java b/bonus-modules/bonus-file/src/main/java/com/bonus/file/service/impl/OssServiceImpl.java index e18ae2c..7bb5c23 100644 --- a/bonus-modules/bonus-file/src/main/java/com/bonus/file/service/impl/OssServiceImpl.java +++ b/bonus-modules/bonus-file/src/main/java/com/bonus/file/service/impl/OssServiceImpl.java @@ -3,10 +3,8 @@ package com.bonus.file.service.impl; import com.alibaba.nacos.common.utils.UuidUtils; import com.aliyun.oss.model.OSSObject; import com.bonus.common.core.domain.R; -import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.utils.file.FileUtils; import com.bonus.common.core.utils.file.MimeTypeUtils; -import com.bonus.file.controller.SysFileController; import com.bonus.file.service.ISysFileService; import com.bonus.file.utils.FileUploadUtils; import com.bonus.file.utils.OssUtils; @@ -15,23 +13,21 @@ import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; + /** * @author jiang */ @@ -58,7 +54,6 @@ public class OssServiceImpl implements ISysFileService { try { //验证文件扩展名和大小 FileUploadUtils.assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); - String originalFilename = Objects.requireNonNull(file.getOriginalFilename(), "文件名不能为空"); originalFilename = originalFilename.replace(" ", ""); String extension = originalFilename.substring(originalFilename.lastIndexOf('.')); @@ -71,19 +66,32 @@ public class OssServiceImpl implements ISysFileService { } @Override - public List uploadFiles(MultipartFile[] files) throws Exception { - try { - List sysFiles = new ArrayList<>(); + public List uploadFiles(MultipartFile[] files) throws InterruptedException, ExecutionException { + // 将每个文件的上传操作作为一个 CompletableFuture 任务 + List> futures = new ArrayList<>(); + for (MultipartFile file : files) { - SysFile sysFile = uploadFile(file); - sysFiles.add(sysFile); + CompletableFuture future = CompletableFuture.supplyAsync(() -> { + try { + return uploadFile(file); + } catch (Exception e) { + throw new RuntimeException("文件上传失败: " + file.getOriginalFilename(), e); + } + }); + futures.add(future); } - return sysFiles; - } catch (Exception e) { - throw new Exception(e); - } + + // 使用 allOf 等待所有任务完成,并收集结果 + CompletableFuture allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); + + // 在所有上传任务完成后,获取每个文件的上传结果 + return allOf.thenApply(v -> futures.stream() + .map(CompletableFuture::join) // 获取每个 CompletableFuture 的结果 + .collect(Collectors.toList()) + ).get(); // .get() 会阻塞直到所有任务完成 } + @Override public void downloadFile(HttpServletResponse response, String urlStr) throws Exception { R ossObjectR = ossUtils.download(urlStr);