From 82282fa857c7a43655ef6f81a207a783472db113 Mon Sep 17 00:00:00 2001 From: MeterSphere Bot <78466014+metersphere-bot@users.noreply.github.com> Date: Tue, 6 Sep 2022 18:21:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E5=AE=9A=E4=B9=89):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8E=A5=E5=8F=A3=E4=B8=AD=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6=E5=88=A0=E9=99=A4=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=96=87=E4=BB=B6=E4=B8=AD=E4=BB=8D?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E7=9A=84=E7=BC=BA=E9=99=B7=20(#17711)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1016591 --user=王孝刚 [接口测试] github#17664接口中上传的文件删除后,服务器文件中仍存在 https://www.tapd.cn/55049933/s/1239342 Co-authored-by: wxg0103 <727495428@qq.com> --- .../api/service/ApiAutomationService.java | 6 +++ .../api/service/ApiDefinitionService.java | 2 + .../metersphere/commons/utils/FileUtils.java | 41 +++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java b/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java index 8213d3c0f7..a83a4f514c 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java @@ -376,6 +376,12 @@ public class ApiAutomationService { } deleteUpdateBodyFile(scenario, beforeScenario); + if (CollectionUtils.isNotEmpty(request.getScenarioDefinition().getHashTree())) { + request.getScenarioDefinition().getHashTree().stream().forEach(hashTree -> { + //删除不需要的文件 + FileUtils.deleteBodyFiles(hashTree); + }); + } scenario.setCreateUser(null); // 更新时不更新创建人 ApiScenarioExample example = new ApiScenarioExample(); example.createCriteria().andIdEqualTo(scenario.getId()).andVersionIdEqualTo(request.getVersionId()); diff --git a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java index b77464091c..55dadb7145 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java @@ -357,6 +357,8 @@ public class ApiDefinitionService { MockConfigService mockConfigService = CommonBeanFactory.getBean(MockConfigService.class); mockConfigService.updateMockReturnMsgByApi(returnModel); FileUtils.createBodyFiles(request.getRequest().getId(), bodyFiles); + //删除不需要的文件 + FileUtils.deleteBodyFiles(request.getRequest()); return getById(returnModel.getId()); } diff --git a/backend/src/main/java/io/metersphere/commons/utils/FileUtils.java b/backend/src/main/java/io/metersphere/commons/utils/FileUtils.java index 96dea06d10..872d7e36ac 100644 --- a/backend/src/main/java/io/metersphere/commons/utils/FileUtils.java +++ b/backend/src/main/java/io/metersphere/commons/utils/FileUtils.java @@ -1,9 +1,13 @@ package io.metersphere.commons.utils; +import io.metersphere.api.dto.definition.request.sampler.MsHTTPSamplerProxy; +import io.metersphere.api.dto.scenario.Body; +import io.metersphere.api.dto.scenario.KeyValue; import io.metersphere.api.dto.scenario.request.BodyFile; import io.metersphere.base.domain.JarConfig; import io.metersphere.commons.exception.MSException; import io.metersphere.i18n.Translator; +import io.metersphere.plugin.core.MsTestElement; import io.metersphere.service.JarConfigService; import io.metersphere.utils.LoggerUtil; import org.apache.commons.collections.CollectionUtils; @@ -19,6 +23,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.util.*; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -120,6 +125,42 @@ public class FileUtils { } } + public static void deleteBodyFiles(MsTestElement request) { + if (StringUtils.isNotBlank(request.getId())) { + String path = BODY_FILE_DIR + File.separator + request.getId(); + File testDir = new File(path); + if (!testDir.exists()) { + return; + } + List files = new ArrayList<>(); + if (request != null && StringUtils.equalsIgnoreCase(request.getType(), HTTPSamplerProxy.class.getSimpleName())) { + MsHTTPSamplerProxy samplerProxy = (MsHTTPSamplerProxy) request; + Body body = samplerProxy.getBody(); + if (body != null && !CollectionUtils.isEmpty(body.getKvs())) { + body.getKvs().stream().filter(KeyValue::isFile).forEach(keyValue -> { + files.addAll(keyValue.getFiles().stream().map(BodyFile::getName).collect(Collectors.toList())); + }); + } + if (body != null && !CollectionUtils.isEmpty(body.getBinary())) { + body.getBinary().stream().filter(KeyValue::isFile).filter(KeyValue::isEnable).forEach(keyValue -> { + files.addAll(keyValue.getFiles().stream().map(BodyFile::getName).collect(Collectors.toList())); + }); + } + } + + File[] optFilesName = testDir.listFiles(); + if (CollectionUtils.isNotEmpty(files)) { + for (File f : optFilesName) { + if (!files.contains(f.getName())) { + f.delete(); + } + } + } else { + FileUtil.deleteContents(testDir); + testDir.delete(); + } + } + } public static void copyBodyFiles(String sourceId, String targetId) { try {