Spring/MVC

# FileInputStream - 파일 다운로드 처리

뭉지맘 2025. 2. 17. 09:31

파일을 올렸으면 다운로드를 받을 수 있게 처리해야했당..

<a href="경로?키값=${테이블.키값}">
	${file.orgFileName}
</a>

 

일단 앞단에서 a태그에 파일 경로를 설정해주고

특정 파일을 조회하는 로직을 만든다.. (mapper..service..)

 

그런다음 컨트롤러에 뷰단에 설정한 경로로 요청이 들어왔을 때 처리를 해줘야 하는데

파일 정보를 아까 만든 특정 파일을 조회하는 로직으로 확인하고

파일 경로를 가지고 파일이 존재하는지 확인한다음

 

 아래처럼 파일 다운로드에 필요한 응답헤더를 설정해야 했다.

response.setContentType("application/octet-stream");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition",
        "attachment; filename=\"" + URLEncoder.encode(fileDTO.getOrgFileName(), "UTF-8") + "\"");

 

그런 다음 파일인풋스트림으로 파일을 읽고

response.getOutputStream()을 이용해 클라이언트에게 데이터를 전송한다.

FileInputStream fis = new FileInputStream(file);
     OutputStream os = response.getOutputStream()) {
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = fis.read(buffer)) != -1) {
        os.write(buffer, 0, bytesRead);
    }
    os.flush();

 

그떄 버퍼를 사용하여 1KB씩 데이터를 읽어 스트림으로 전송한다.

flush()를 호출하면 모든 데이터가 클라이언트로 전송된다.

 

에러가 날부분에 예외처리를 잘 해주장..!