From 7e150edd735b2d2243fcca2bf1a9ff259292a915 Mon Sep 17 00:00:00 2001 From: "semin.baek" Date: Tue, 18 Mar 2025 19:30:40 +0900 Subject: [PATCH] =?UTF-8?q?File=20=EC=88=98=EC=8B=A0=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C(=EC=B2=98=EB=A6=AC(TaskExecutorService)?= =?UTF-8?q?=EB=8A=94=20=EB=AF=B8=EC=99=84=EB=A3=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent/listener/dto/ReceiveMessageDto.java | 3 ++ .../listener/service/ListenerService.java | 31 +++++++++++++++++-- .../dfx/agent/support/MessageUtils.java | 7 ++--- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java b/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java index 5eea109..3446f11 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java @@ -4,6 +4,8 @@ import com.bsmlab.dfx.agent.config.AgentConfigDto; import lombok.*; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; @Getter @Setter @@ -19,6 +21,7 @@ public class ReceiveMessageDto implements Serializable { private String recipientHostId; private String recipientDropBoxId; private String data; + private List attachFileList = new ArrayList<>(); private ProcessStatus processStatus; public static enum ProcessStatus { diff --git a/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java b/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java index eb7153f..a753a36 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java @@ -15,9 +15,17 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.text.SimpleDateFormat; import java.util.Collection; +import java.util.Date; import java.util.Iterator; @RequiredArgsConstructor @@ -35,7 +43,6 @@ public class ListenerService { ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_FAIL).resultText("금일 전송한 메시지 중 중복된 UUID가 존재합니다.").build(); } else { - //receiveMessageDto.setProcessStatus(); dropBoxService.add(receiveMessageDto); ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_SUCCESS).build(); } @@ -67,12 +74,32 @@ public class ListenerService { firstPart = iterator.next(); String messageJsonString = new String(firstPart.getInputStream().readAllBytes(), StandardCharsets.UTF_8); ReceiveMessageDto receiveMessageDto = MessageUtils.toReceiveMessageDto(messageJsonString); + // DropBox(수신설정) 가져오기 AgentConfigDto.DropBox dropBox = agentConfigReader.getDropBox(receiveMessageDto.getRecipientDropBoxId()); + // DropBox 의 경로에 따라서 파일 저장 위치 설정 String saveDirectoryRoot = dropBox.getSaveDirectoryRoot(); + Date today = new Date(System.currentTimeMillis()); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd/hh/mm/ss"); + String targetDirectoryString = saveDirectoryRoot + "/" + dateFormat.format(today); + File targetDirectory = new File(targetDirectoryString); + if(!targetDirectory.exists()) { + targetDirectory.mkdirs(); + } + byte[] buff = new byte[4096]; while(iterator.hasNext()) { + // 파일 수신 처리 Part part = iterator.next(); - //TODO 파일 수신 처리 + String fileName = part.getSubmittedFileName(); + String targetFilePath = targetDirectoryString + "/" + fileName; + Path targetPath = Paths.get(targetDirectoryString, fileName); + try(InputStream inputStream = part.getInputStream()) { + Files.copy(inputStream, targetPath, StandardCopyOption.REPLACE_EXISTING); + } + receiveMessageDto.getAttachFileList().add(targetFilePath); } + // 수신 정보를 queue 에 저장하고 Ack 설정 + dropBoxService.add(receiveMessageDto); + ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_SUCCESS).build(); } } catch(IllegalMessageException | IOException | InCompleteMessageException | NullMessageException e) { diff --git a/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java b/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java index 873f28d..4c631c0 100644 --- a/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java +++ b/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java @@ -11,10 +11,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.EnumUtils; import org.apache.commons.lang3.StringUtils; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; public class MessageUtils { private MessageUtils() {}; @@ -135,7 +132,7 @@ public class MessageUtils { .senderHostId(senderHostId).senderTimestamp(senderTimestamp) .messageUuid(messageUuid).messageType(messageType).receivedTimestamp(receivedTimestamp) .recipientHostId(recipientHostId).recipientDropBoxId(recipientDropBoxId) - .data(dataString).processStatus(ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED) + .data(dataString).attachFileList(new ArrayList<>()).processStatus(ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED) .build(); } catch(JsonProcessingException e) {