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()를 호출하면 모든 데이터가 클라이언트로 전송된다.
에러가 날부분에 예외처리를 잘 해주장..!