fix(接口定义): 修复接口中上传的文件删除后,服务器文件中仍存在的缺陷 (#17713)
--bug=1016591 --user=王孝刚 [接口测试] github#17664接口中上传的文件删除后,服务器文件中仍存在 https://www.tapd.cn/55049933/s/1239342 Co-authored-by: wxg0103 <727495428@qq.com>
This commit is contained in:
parent
5e75e55ed1
commit
c4f46e2b92
|
@ -398,6 +398,7 @@ public class ApiAutomationService {
|
|||
}
|
||||
|
||||
deleteUpdateBodyFile(scenario, beforeScenario);
|
||||
|
||||
scenario.setCreateUser(null); // 更新时不更新创建人
|
||||
ApiScenarioExample example = new ApiScenarioExample();
|
||||
example.createCriteria().andIdEqualTo(scenario.getId()).andVersionIdEqualTo(request.getVersionId());
|
||||
|
@ -426,6 +427,12 @@ public class ApiAutomationService {
|
|||
extScheduleMapper.updateNameByResourceID(request.getId(), request.getName());// 修改场景name,同步到修改首页定时任务
|
||||
uploadFiles(request, bodyFiles, scenarioFiles);
|
||||
|
||||
if (CollectionUtils.isNotEmpty(request.getScenarioDefinition().getHashTree())) {
|
||||
request.getScenarioDefinition().getHashTree().stream().forEach(hashTree -> {
|
||||
//删除不需要的文件
|
||||
FileUtils.deleteBodyFiles(hashTree);
|
||||
});
|
||||
}
|
||||
|
||||
// 存储依赖关系
|
||||
ApiAutomationRelationshipEdgeService relationshipEdgeService = CommonBeanFactory.getBean(ApiAutomationRelationshipEdgeService.class);
|
||||
|
|
|
@ -421,6 +421,9 @@ public class ApiDefinitionService {
|
|||
mockConfigService.updateMockReturnMsgByApi(returnModel);
|
||||
FileUtils.createBodyFiles(request.getRequest().getId(), bodyFiles);
|
||||
|
||||
//删除不需要的文件
|
||||
FileUtils.deleteBodyFiles(request.getRequest());
|
||||
|
||||
String context = SessionUtils.getUserId().concat(Translator.get("update_api")).concat(":").concat(returnModel.getName());
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
getParamMap(paramMap, returnModel.getProjectId(), SessionUtils.getUserId(), returnModel.getId(), returnModel.getName(), returnModel.getCreateUser());
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
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.FileMetadata;
|
||||
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;
|
||||
|
@ -20,6 +24,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;
|
||||
|
||||
|
@ -124,6 +129,42 @@ public class FileUtils {
|
|||
}
|
||||
}
|
||||
|
||||
public static void deleteBodyFiles(MsTestElement request) {
|
||||
if (request != null && StringUtils.isNotBlank(request.getId())) {
|
||||
String path = BODY_FILE_DIR + File.separator + request.getId();
|
||||
File testDir = new File(path);
|
||||
if (!testDir.exists()) {
|
||||
return;
|
||||
}
|
||||
List<String> 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 {
|
||||
|
|
Loading…
Reference in New Issue