String fileName = "다운받을 시의 파일이름";
String saveFileName = "경로+실제 폴더에 저장된 파일 이름";
File file = new File(saveFileName);
long fileLength = file.length();
response.setHeader("Content-Disposition", "attachment; filename=\"" + 다운받는 사용자에게 보여질 파일명 + "\";");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Type", "application/download");
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");
}
File file1 = new File(경로, 파일이름);
혹은
File file2 = new File(파일전체경로);
헤더
부가적인 정보를 전송할 수 있도록 해줌.
서버에게 요청하거나 클라이언트에게 응답할 데이터가 담겨있음.
// 예시
1. response.setHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
2. response.setHeader(“Expires”, 0);
3. long expiry = new Date().getTime() + cacheAge*1000; // 원하는 시간 지정
response.setHeader(“Expires”, expiry)
XSSFWorkbook xssfWb = null;
XSSFSheet xssfSheet = null;
XSSFRow xssfRow = null;
XSSFCell xssfCell = null;
try {
...
엑셀파일 작성부분 생략
String fileName = "직원목록_파일제목.xlsx";
String outputFileName = new String(fileName.getBytes("KSC5601"), "8859_1");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; fileName=\"" + outputFileName + "\"");
xssfWb.write(response.getOutputStream());
xssfWb.close();
}catch(Exception e){
e.printStackTrace();
}
파일다운로드: https://velog.io/@oyeon/%ED%8C%8C%EC%9D%BC-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EA%B5%AC%ED%98%84
https://hyeounstory.tistory.com/67
엑셀파일 다운로드: