스마트폰에서 파일 다운로드 에러 좀 잡아 주세요
- 작성자 :
- 오*택
- 작성일 :
- 2014-09-24 15:21:28
- 조회수 :
- 3,125
- 구분 :
- 모바일
- 진행상태 :
- 완료
Q
반응형 웹으로 개발된 사이트 입니다.
주간업무.hwp 파일을 다운 받을 경우 에러 좀 잡아주세요
EgovFileDownloadController 에서
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("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 {
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
}
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
response.setContentType("application/octer-stream");
response.setHeader("Content-Transfer-Encoding", "binary;");
if ("Opera".equals(browser)) {
response.setContentType("application/octet-stream;charset=UTF-8");
}
}
셋팅을 하고 local 에서 테스트 했을때 firefox로 한글명으로 잘 받아 집니다.
그래서 문제가 없는줄 알았는데
스마트폰으로 보면서 한글뷰어를 설치하고 다운받으면서 문제가 발생했습니다.
firefox는 한글이 깨지면서 다운받아 집니다. 다운받은 파일을 열기를 하면 열수 없는 파일이라고 나옵니다.
한글뷰어에 들어가서 download 폴더에서 파일을 찾아서 열면 잘 열립니다.
어떤 경우엔 download.bin 으로 다운받아지기도 합니다. 확장자를 hwp로 바꾸면 한글뷰어에서 읽어 집니다.
사파리 경우엔 Disposition 을 어떻게 셋팅해야 하는지 궁금 합니다.
질문요약
1. 스마트폰에서 기본브라우저(인터넷, 크롬)로 다운받는 경우 다운받은 파일이 열 수 없는 파일이라고 나옵니다.
2. 스마트폰에서 firefox로 다운받으면 한글파일명이 깨지는 문제 입니다..
3. 사파리에서 Disposition 을 어떻게 셋팅해야 하는지와 한글파일명 깨지는 문제 입니다.
firefox , 사파리
주간업무.hwp 파일을 다운 받을 경우 에러 좀 잡아주세요
EgovFileDownloadController 에서
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("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 {
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");
}
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
response.setContentType("application/octer-stream");
response.setHeader("Content-Transfer-Encoding", "binary;");
if ("Opera".equals(browser)) {
response.setContentType("application/octet-stream;charset=UTF-8");
}
}
셋팅을 하고 local 에서 테스트 했을때 firefox로 한글명으로 잘 받아 집니다.
그래서 문제가 없는줄 알았는데
스마트폰으로 보면서 한글뷰어를 설치하고 다운받으면서 문제가 발생했습니다.
firefox는 한글이 깨지면서 다운받아 집니다. 다운받은 파일을 열기를 하면 열수 없는 파일이라고 나옵니다.
한글뷰어에 들어가서 download 폴더에서 파일을 찾아서 열면 잘 열립니다.
어떤 경우엔 download.bin 으로 다운받아지기도 합니다. 확장자를 hwp로 바꾸면 한글뷰어에서 읽어 집니다.
사파리 경우엔 Disposition 을 어떻게 셋팅해야 하는지 궁금 합니다.
질문요약
1. 스마트폰에서 기본브라우저(인터넷, 크롬)로 다운받는 경우 다운받은 파일이 열 수 없는 파일이라고 나옵니다.
2. 스마트폰에서 firefox로 다운받으면 한글파일명이 깨지는 문제 입니다..
3. 사파리에서 Disposition 을 어떻게 셋팅해야 하는지와 한글파일명 깨지는 문제 입니다.
firefox , 사파리
A
안녕하세요. 오일택님.
파일 다운로드의 경우 모바일 기기에 따라 다운로드로 특정 파일 유형을 처리하지 못하는 경우가 있습니다. 이런 경우 기본 브라우저가 아닌 다른 브라우저를 사용하셔야 합니다.
Firefox의 한글 깨지는 문제는 PC용과 같이 8859_1 형식이 아닌 UTF-8 형식이어서 그런 것 같습니다.
이런 경우 다음과 같이 인코딩 변경 없이 지정해 보시면 되실 것 같습니다.
encodedFilename = "\"" + filename + "\"";
참고로 원래의 filename은 UTF-8로 저장되어 있으셔야 합니다.
사파리의 경우
RequestHeader를 다음과 같이 변경 하시고,
response.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8'"); // Safari 브라우져 한글 처리
response.setRequestHeader('Ajax', 'true'); // Safari 브라우져 한글 처리
파일면은 다음과 같이 처리하시면 되실 것 같습니다.
encodedFilename = new String(filename.getBytes("UTF-8"), "8859_1");
그럼, 즐거운 하루되십시오.
감사합니다.
파일 다운로드의 경우 모바일 기기에 따라 다운로드로 특정 파일 유형을 처리하지 못하는 경우가 있습니다. 이런 경우 기본 브라우저가 아닌 다른 브라우저를 사용하셔야 합니다.
Firefox의 한글 깨지는 문제는 PC용과 같이 8859_1 형식이 아닌 UTF-8 형식이어서 그런 것 같습니다.
이런 경우 다음과 같이 인코딩 변경 없이 지정해 보시면 되실 것 같습니다.
encodedFilename = "\"" + filename + "\"";
참고로 원래의 filename은 UTF-8로 저장되어 있으셔야 합니다.
사파리의 경우
RequestHeader를 다음과 같이 변경 하시고,
response.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8'"); // Safari 브라우져 한글 처리
response.setRequestHeader('Ajax', 'true'); // Safari 브라우져 한글 처리
파일면은 다음과 같이 처리하시면 되실 것 같습니다.
encodedFilename = new String(filename.getBytes("UTF-8"), "8859_1");
그럼, 즐거운 하루되십시오.
감사합니다.