setHeader의 위치

김민지·2022년 12월 16일
0

백엔드로드맵

목록 보기
10/13
@GetMapping(value = "/resume/download/personId/{personId}")
    public void zipDownload(@PathVariable Long personId, HttpServletResponse response) throws IOException {
        String zipName = "resume";
        response.setContentType("application/octet-stream");
        response.setStatus(HttpServletResponse.SC_OK);
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + zipName);

        List<String> fileNameList = resumeService.getResumeFileNameList(personId);
        ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
        for (String fileName: fileNameList) {
            FileSystemResource fileResource = new FileSystemResource(fileBasePath + fileName);
            ZipEntry zipEntry = new ZipEntry(fileResource.getFilename());
            zipEntry.setSize(fileResource.contentLength());
            zipOut.putNextEntry(zipEntry);
            StreamUtils.copy(fileResource.getInputStream(), zipOut);
            zipOut.closeEntry();
        }
        zipOut.finish();
        zipOut.close();

    }

setHeader의 위치를 가장 마지막줄에 위치시키면 다운로드 이름이 제대로 나오지 않는다 하지만 난 다음같은 결과를 원한다

나중에 set하는것은 이전에 무엇이 있든 나중값으로 변경이 될테니 문제가 없을것이라고 생각했다. 그런데 다운로드 기능이 setHeader이전에 끝나기때문에 setHeader되기 전에 이상한이름으로 출력이 되는 것 같다

profile
안녕하세요!

0개의 댓글