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) {