-
Spring - 파일 다운로드 하기Spring 2019. 2. 25. 22:21
Spring - 파일 업로드 하기 에서 업로드한 파일을 다운받아보자
파일 다운로드는 스프링으로 하는 것 과 그냥 서블릿으로 하는 것의 차이가 없다.
FileController에 fileDownload 메소드를 만들어 준다.
@RequestMapping("/file/filedownload") public void fileDownload(HttpServletRequest request, HttpServletResponse response) { String saveDir = request.getSession().getServletContext().getRealPath("/resources/upload/file"); String fileName = "20190223-223005277_939.jpg"; File file = new File(saveDir + "/" + fileName); FileInputStream fis = null; BufferedInputStream bis = null; ServletOutputStream sos = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); sos = response.getOutputStream(); String reFilename = ""; boolean isMSIE = request.getHeader("user-agent").indexOf("MSIE") != -1 || request.getHeader("user-agent").indexOf("Trident") != -1; if(isMSIE) { reFilename = URLEncoder.encode("이미지 파일.jpg", "utf-8"); reFilename = reFilename.replaceAll("\\+", "%20"); }else { reFilename = new String("이미지 파일.jpg".getBytes("utf-8"), "ISO-8859-1"); } response.setContentType("application/octet-stream;charset=utf-8"); response.addHeader("Content-Disposition", "attachment;filename=\""+reFilename+"\""); response.setContentLength((int)file.length()); int read = 0; while((read = bis.read()) != -1) { sos.write(read); } }catch(IOException e) { e.printStackTrace(); }finally { try { sos.close(); bis.close(); }catch (IOException e) { e.printStackTrace(); } } }
코드에 대한 간단한 설명은 다음과 같다.
saveDir 에 서버 상의 파일 저장 경로를 불러온다.
fileName 은 간단히 테스트 용이기 때문에 직접 지정했다.FileInputStream 과 BufferedInputStream 을 이용하여 파일을 읽어온다.
reFilename 은 다운받는 파일의 이름을 지정하는 것이다. fileName과 같이 직접 지정했다.
IE 로 실행할 경우는 따로 인코딩을 해주어야 한다. IE 는 request의 헤더에 MSIE 또는 Trident가 포함되어 있다.
IE를 제외한 다른 브라우저로 실행할 경우 한글이 깨지는 것을 방지하기 위해 인코딩을 해준다.response의 ContentType과 ContentLength 를 설정하고 헤더를 추가한다.
InputStream으로 읽어오는 데이터를 ServletOutputStream을 이용하여 출력해준다.
서버를 실행하고 메소드에 매핑되어 있는 주소로 직접 접근하면 '이미지 파일.jpg' 인 파일을 저장할 수 있게 된다.
저장받은 파일을 열어보면 파일이 잘 다운로드 됐다는 것을 확인할 수 있다.
반응형'Spring' 카테고리의 다른 글
Spring - security 암호화 하기 (0) 2019.02.26 Spring - 트랜잭션 처리하기 (0) 2019.02.25 Spring - 파일 업로드 하기 (0) 2019.02.23 Spring - MyBatis 설정하기 (0) 2019.02.20 Spring - 설정하기 (0) 2019.02.20