엑셀 다운로드 관련 재질문
- 작성자 :
- 진*범
- 작성일 :
- 2014-10-16 11:45:04
- 조회수 :
- 859
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
예제를 보고 엑셀 다운로드를 구현하였는데요.
그런데 다운로드 버튼을 눌렀을때 바로 저장되더라고요.
열기나 다른이름으로 저장 등의 창이 뜨게 할려면 어떻게 해야하나요?
그런데 다운로드 버튼을 눌렀을때 바로 저장되더라고요.
열기나 다른이름으로 저장 등의 창이 뜨게 할려면 어떻게 해야하나요?
A
안녕하세요. 진동범님.
HttpServletResponse 상에 다운로드 파일명에 대하여 다음과 같은 형태의 메소드 호추를 통해 해주셔야 합니다. (buildExcelDocument 메소드 상의 HttpServletResponse에 처리)
private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws Exception {
String browser = getBrowser(request);
String dispositionPrefix = "attachment; filename=";
String encodedFilename = null;
if (browser.equals("MSIE")) {
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.equals("Firefox")) {
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.equals("Opera")) {
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.equals("Chrome")) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < filename.length(); i++) {
char c = filename.charAt(i);
if (c > '~') {
sb.append(URLEncoder.encode("" + c, "UTF-8"));
} else {
sb.append(c);
}
}
encodedFilename = sb.toString();
} else {
throw new IOException("Not supported browser");
}
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
if ("Opera".equals(browser)) {
response.setContentType("application/octet-stream;charset=UTF-8");
}
}
그럼, 즐거운 하루되십시오.
감사합니다.
HttpServletResponse 상에 다운로드 파일명에 대하여 다음과 같은 형태의 메소드 호추를 통해 해주셔야 합니다. (buildExcelDocument 메소드 상의 HttpServletResponse에 처리)
private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws Exception {
String browser = getBrowser(request);
String dispositionPrefix = "attachment; filename=";
String encodedFilename = null;
if (browser.equals("MSIE")) {
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.equals("Firefox")) {
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.equals("Opera")) {
encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.equals("Chrome")) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < filename.length(); i++) {
char c = filename.charAt(i);
if (c > '~') {
sb.append(URLEncoder.encode("" + c, "UTF-8"));
} else {
sb.append(c);
}
}
encodedFilename = sb.toString();
} else {
throw new IOException("Not supported browser");
}
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
if ("Opera".equals(browser)) {
response.setContentType("application/octet-stream;charset=UTF-8");
}
}
그럼, 즐거운 하루되십시오.
감사합니다.