@GetMapping("/download")
public void downloadFile(@RequestParam("fileName") String fileNm, HttpServletResponse response) {

    // 파라미터를 통해 파일의 정보를 가져와 reponse에 세팅
    String fileName = "3.png";
    String saveFileName = "c:/tmp/2020/02/07/3.png";
    String contentType = "image/png";
    int fileLength = 116303;

    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\";");
    response.setHeader("Content-Transfer-Encoding", "binary");
    response.setHeader("Content-Type", contentType);
    response.setHeader("Content-Length", "" + fileLength);
    response.setHeader("Pragma", "no-cache;");
    response.setHeader("Expires", "-1;");

    try (
        FileInputStream fis = new FileInputStream(saveFileName); 
        OutputStream out = response.getOutputStream();) {

        int readCount = 0;
        byte[] buffer = new byte[1024];

        while ((readCount = fis.read(buffer)) != -1) {
        out.write(buffer, 0, readCount);
        }

    }catch(Exception ex){
        throw new RuntimeException("file Save Error");
    }
}