보증서발행완료 zip파일 다운로드시 데이터가 없는 경우 no_contents 처리

This commit is contained in:
DESKTOP-6ARNG1Q\dlsgk 2024-10-29 09:55:57 +09:00
parent 90930a11f1
commit d886e2a27a
3 changed files with 48 additions and 38 deletions

View File

@ -64,9 +64,9 @@ public class ExcelDownController {
@Operation(description = "과거데이터_보증서발행완료 물건 파일 다운로드 조회") @Operation(description = "과거데이터_보증서발행완료 물건 파일 다운로드 조회")
@PostMapping("/wrnt-isnc-cmpl-file-down") @PostMapping("/wrnt-isnc-cmpl-file-down")
@ResponseStatus(HttpStatus.OK) public void warrantyIssuedCmpFileDown(
public void warrantyIssuedCmpFileDown(@RequestBody WrntIsncCmplRequest wrntIsncCmplRequest, @RequestBody WrntIsncCmplRequest wrntIsncCmplRequest, HttpServletResponse response)
HttpServletResponse response) throws Exception { throws Exception {
try { try {
excelDownService.selectWarrantyIssuedCmpFileData(wrntIsncCmplRequest, response); excelDownService.selectWarrantyIssuedCmpFileData(wrntIsncCmplRequest, response);
} catch (Exception e) { } catch (Exception e) {

View File

@ -1,8 +1,6 @@
package com.interplug.qcast.biz.excelDown; package com.interplug.qcast.biz.excelDown;
import com.interplug.qcast.biz.excelDown.dto.*; import com.interplug.qcast.biz.excelDown.dto.*;
import com.interplug.qcast.config.Exception.ErrorCode;
import com.interplug.qcast.config.Exception.QcastException;
import com.interplug.qcast.config.message.Messages; import com.interplug.qcast.config.message.Messages;
import com.interplug.qcast.util.ZipFileManager; import com.interplug.qcast.util.ZipFileManager;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@ -66,9 +64,12 @@ public class ExcelDownService {
} }
zipFileManager.createZipFile(response, "Warranty-issued-completed-files", listFile); zipFileManager.createZipFile(response, "Warranty-issued-completed-files", listFile);
} else { } else {
throw new QcastException( // 데이터가 없을 경우 NO_CONTENT 상태 코드 설정 종료
ErrorCode.NOT_FOUND, message.getMessage("common.message.no.dataDown")); response.setStatus(HttpServletResponse.SC_NO_CONTENT);
response.getWriter().write(message.getMessage("common.message.no.dataDown"));
response.flushBuffer();
} }
} }
} }

View File

@ -1,37 +1,37 @@
package com.interplug.qcast.util; package com.interplug.qcast.util;
import com.interplug.qcast.config.message.Messages;
import jakarta.servlet.http.HttpServletResponse;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.interplug.qcast.config.message.Messages;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Slf4j @Slf4j
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
public class ZipFileManager { public class ZipFileManager {
@Autowired @Autowired Messages message;
Messages message;
/** /**
* zip file을 생성하여 ZipOutputStream를 반환하는 method * zip file을 생성하여 ZipOutputStream를 반환하는 method
* *
* @param response HttpServletResponse * @param response HttpServletResponse
* @param strCreateFileName 생성할 file 이름 * @param strCreateFileName 생성할 file 이름
* @param listFilePath 파일 정보 목록 * @param listFile 파일 정보 목록
*/ */
public void createZipFile(HttpServletResponse response, String strCreateFileName, public void createZipFile(
List<Map<String, String>> listFile) throws Exception { HttpServletResponse response, String strCreateFileName, List<Map<String, String>> listFile)
throws Exception {
// 압축될 파일명이 존재하지 않을 경우 // 압축될 파일명이 존재하지 않을 경우
if (strCreateFileName == null || "".equals(strCreateFileName)) if (strCreateFileName == null || "".equals(strCreateFileName))
throw new IllegalArgumentException( throw new IllegalArgumentException(
@ -44,7 +44,27 @@ public class ZipFileManager {
// zip 파일명 // zip 파일명
String strZipName = strCreateFileName + ".zip"; String strZipName = strCreateFileName + ".zip";
// response 설정 // 파일이 실제로 존재하는지 확인하기 위해 카운트
int cnt = 0;
for (Map<String, String> mapFile : listFile) {
String strSourceFile = mapFile.get("filename");
Path path = Path.of(strSourceFile);
if (path.toFile().exists()) {
cnt++;
}
}
log.debug("cnt :: " + cnt);
// 파일이 없을 경우 상태 코드와 메시지 설정 종료
if (cnt == 0) {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
response.getWriter().write("No files available for download.");
response.flushBuffer();
return; // 메서드 종료
}
// 파일이 있을 경우에만 ZIP 파일 생성
response.setContentType("application/zip"); response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=" + strZipName + ";"); response.setHeader("Content-Disposition", "attachment; filename=" + strZipName + ";");
response.setStatus(HttpServletResponse.SC_OK); response.setStatus(HttpServletResponse.SC_OK);
@ -55,43 +75,32 @@ public class ZipFileManager {
String strSourceFile = mapFile.get("filename"); String strSourceFile = mapFile.get("filename");
Path path = Path.of(strSourceFile); Path path = Path.of(strSourceFile);
try (FileInputStream fis = new FileInputStream(path.toFile())) { if (!path.toFile().exists()) {
// 압축될 파일명을 ZipEntry에 담아준다 log.debug("파일 변환 작업중, [ " + strSourceFile + " ] 파일을 찾을 수 없습니다.");
ZipEntry zipEntry = new ZipEntry(strDirectory + "\\" + path.getFileName().toString()); continue; // 파일이 없으면 스킵
}
// 압축될 파일명을 ZipOutputStream 담아준다 try (FileInputStream fis = new FileInputStream(path.toFile())) {
ZipEntry zipEntry = new ZipEntry(strDirectory + "\\" + path.getFileName().toString());
zos.putNextEntry(zipEntry); zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024]; byte[] buffer = new byte[1024];
int length; int length;
while ((length = fis.read(buffer)) >= 0) { while ((length = fis.read(buffer)) >= 0) {
zos.write(buffer, 0, length); zos.write(buffer, 0, length);
} }
} catch (FileNotFoundException e) {
// response.setStatus(HttpServletResponse.SC_NOT_FOUND);
// throw new IllegalArgumentException("파일 변환 작업중, [ " + strSourceFile + " ] 파일을 찾을 수
// 없습니다.");
log.debug("파일 변환 작업중, [ " + strSourceFile + " ] 파일을 찾을 수 없습니다.");
} catch (IOException e) { } catch (IOException e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
throw new IllegalArgumentException( throw new IllegalArgumentException(
"파일 변환 작업중, [ " + strSourceFile + " ] 파일을 다운로드 할 수 없습니다."); "파일 변환 작업중, [ " + strSourceFile + " ] 파일을 다운로드 할 수 없습니다.");
} finally { } finally {
// ZipOutputStream 담아둔 압축될 파일명을 flush 시켜준다
zos.flush();
// ZipOutputStream 담아둔 압축될 파일명을 close 시켜준다
zos.closeEntry(); zos.closeEntry();
} }
} }
} catch (Exception e) { } catch (Exception e) {
throw e; throw e;
} finally { }
try {
// response 담아둔 파일을 flush 시켜준다
response.flushBuffer(); response.flushBuffer();
} catch (IOException e) {
throw e;
}
}
} }
} }