From 69a86bbe578b601ea8465a83293902f7ef45eba2 Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Mon, 16 Jun 2025 16:28:39 +0300 Subject: [PATCH] Do not use files for creating response to nbki service --- .../service/signal/SignalRestService.java | 48 ++++++++----------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java index 0c1c5fe..09506a8 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java @@ -2,9 +2,9 @@ package ru.nbch.credit_tracker.service.signal; import jakarta.xml.bind.DatatypeConverter; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.core.io.PathResource; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.core.io.Resource; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -18,13 +18,11 @@ import ru.nbch.credit_tracker.entities.signal_package.Signals; import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor; import ru.nbch.credit_tracker.service.xml.jaxb.XmlUtilService; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; +import java.io.ByteArrayOutputStream; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.Base64; -import java.util.UUID; import java.util.zip.GZIPOutputStream; @Slf4j @@ -48,16 +46,10 @@ public class SignalRestService { } public String update(Signals signals) throws Exception { - String folder = tmpFilePath + File.separator + UUID.randomUUID(); - String path = folder + File.separator + "reply.xml"; - IXmlProcessor processor = xmlUtilService.createJaxbProcessor(); - processor.write(path, signals, false); - - String archivePath = compressFile(path, folder); - PathResource fileResource = new PathResource(archivePath); + Resource request = compressFile(signals); MultiValueMap body = new LinkedMultiValueMap<>(); - body.add("file", fileResource); + body.add("file", request); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); @@ -67,9 +59,6 @@ public class SignalRestService { ResponseEntity response = restTemplate.postForEntity(UPDATE_URI, requestEntity, String.class); - FileUtils.delete(FileUtils.getFile(path)); - FileUtils.delete(FileUtils.getFile(archivePath)); - if (response.getStatusCode().value() == 302) { // good response return null; @@ -80,20 +69,21 @@ public class SignalRestService { return "Непредвиденная ошибка"; } - private String compressFile(String filePath, String folderPath) throws Exception { - byte[] buffer = new byte[1024]; - String archivePath = folderPath + "arhive.gz"; + private Resource compressFile(Signals signals) throws Exception { + IXmlProcessor processor = xmlUtilService.createJaxbProcessor(); + String requestData = processor.asString(signals, false); - FileInputStream fis = new FileInputStream(filePath); - GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream(archivePath)); - - int bytesRead; - while ((bytesRead = fis.read(buffer)) != -1) { - gzos.write(buffer, 0, bytesRead); + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + try (GZIPOutputStream gzipStream = new GZIPOutputStream(byteStream)) { + gzipStream.write(requestData.getBytes(Charset.forName("windows-1251"))); } - gzos.close(); - fis.close(); - return archivePath; + + return new ByteArrayResource(byteStream.toByteArray()) { + @Override + public String getFilename() { + return "arhive.gz"; + } + }; } private String buildToken(String signalsToken, String signalsuser) throws Exception {