https://intheham.tistory.com/72
<!-- index.jsp -->
<a href="/down/downlist">자료실</a>
@Controller
@RequestMapping("/down")
public class downController {
private String downPath = "/Users/hamham/Documents/down/";
// 자료실 목록 출력
@GetMapping("/downlist")
public String downList(ModelMap map) {
File dir = new File(downPath); // 지정한 경로에 파일 객체 생성
String[] flist = dir.list();
map.addAttribute("flist", flist);
return "/down/down";
}
<!-- down.jsp -->
<h3>자료실</h3>
<ul>
<c:forEach var="f" items="${flist }">
<li><a href="/down/down?fname=${f }">${f }</a></li>
</c:forEach>
</ul>
// 한글 포함된 파일은 다운로드가 안됨 인코딩처리해야함.
// URLEncoder.encode(fname, "UTF-8") 한글 파일명 인코딩 코드
@RequestMapping("/down")
public ResponseEntity<byte[]> down(String fname) {
File f = new File(downPath + fname);// 타겟 파일에 있는 파일을 읽어서
HttpHeaders header = new HttpHeaders();
ResponseEntity<byte[]> result = null;
try {
header.add("Content-Type", Files.probeContentType(f.toPath()));// 마임타입
header.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=\"" + URLEncoder.encode(fname, "UTF-8") + "\"");
result = new ResponseEntity<byte[]>(FileCopyUtils.copyToByteArray(f), header, HttpStatus.OK);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}