안녕하세요^^
즐거운 주말 잘 보내셨는지요..
다름이 아니라 모바일 웹, 앱 에서
java,jsp 기반 파일 다운로드를 하는데요..
한글파일 자체가 다운로드가 안되서요..
물론 한글뷰어 앱을 설치후 기기에서 다운로드를 받아야 하는 건 찾았지만..
한글 뷰어를 설치해도 다운로드 실패로 나오네요..
일단 겔스에서는 제목없음 다운로드 실패로 나오고
겔스2에서는 ___.hwp 혹은 ___.bin 으로 다운로드 실패가 나옵니다..
도통 검색을 해봐도 나오질 않아서요..
일단 sh 공사 모바일 홈페이지 같은경우는 한글뷰어를 설치 하니까 hwp 확장자 자체가 다운로드 되던데요..
로직은 jsp 페이지 (웹) 에서 특정 링크를 클릭하면 다운로드.jsp 페이지로 이동 후 java 로직을 타게 됩니다 .
그래서 서버에 있는 파일을 불러와서 다운로드 하는데.. 웹에서는 잘 나오는데..
pc 사파리, 모바일 사파리, 크롬 등 다운로드가 안되네요..
인코딩이야 어찌됐건 다운로드 자체가 안되니 문제가 되네요..ㅜㅜㅜ
혹시 아시는 분 있으시면 조언 부탁드립니다.....
다운로드 메쏘드를 직접 만들어 보심은 어떠신가요?
저도 인코딩이나 부수적인 문제가 너무 자꾸 나와서 안드로이드 기본 브라우저 소스 보고
그냥 그대로 따라서 다운로드 메소드를 별도로 만들어서 처리했었습니다.
ㅜㅜ 서버 문제가 아닌가봐요..
hwp 파일 같은경우 어떤 홈페이지를 들어가더라도 다운로드 실패로 나오는데요..
비닥.. 인코딩 문제 뿐만 아닌것 같습니다.
123.hwp 파일로 등록 시켜서 확인 해봤는데 똑같이 다운로드 실패로 나왔네요...
그리고 검색결과 아스트로 폴더 관리 앱에서 환경설정으로 알수 없는 확장자 다운로드로 하니까
제대로 받아지긴하는데요...
이거 어떻게 해결할 방법이 없을까요?ㅜㅜ
제가 딱 3달전 멘붕하고 있을때랑 상황이 정말 비슷한거 같은데요..
다운로드 메소드를 따로 만들어서 사용 했었네요
그때도 확인해 본 결고 사파리에서는 이상한 파일로 날라 왔었던 기억이 있습니다.
다운로드를 클릭했을때 URL이 어떻게 되 있는지는 모르겠지만
웹쪽 담당자에게 다운로드 부분은 URL처리를 마지막에 http://afashf;asdf~~~~~/문서이름.hwp로 해 달라고 하고
안드로이드 쪽에서는 가장 끝 URL을 체크해서 .hwp가 올 경우 다운로드가 진행 되게 해 줬구요
.hwp일때는 어떤 마인값을 쓴다.. 이렇게 지정을 해 줘서 바로 해당 어플로 연결이 되게 해 줬었습니다.
듣기로는 그쪽 다운로드 서비스를 하는 서버쪽도 상당히 특이하게 제작이 되었던 걸로 기억 합니다.
문제 해결했습니다^^
일단 모바일 웹이기 때문에 엑티브X로 다운로드 하지는 않구요 ㅎㅎ
결론적으로 header 문제였네요.... 이것때문에 4일을 고생했는데.. ㅜㅜ
테스트는 톰캣, jsp,java 로 했습니다.
response.setContentType 에 application/x-hwp; 지정 해줘야 합니다.
기존에는 타입 유형이
아이폰 (사파리), 안드로이드 (크롬?) 두개다 Mozila 이긴 한데
인코딩 유형을 다르게 해줘야 합니다.
아이폰 같은경우 아래와 같이 안하면 %123% 이런식으로 디코딩이 안된 상태로 나옵니다. 혹은 utf-asdf_123 이런식으로 깨져서 확장자가 날라 가거나요..
안드로이드 일 경우는 url인코딩만 잘 해주면 한글이 깨지지 않고 잘 나오네요
response.setHeader("Content-Disposition",
"attachment;filename=\"" + URLEncoder.encode(filename, "utf-8") + "\";");
[테스트 소스]
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(filename.getBytes("UTF-8"),"ISO-8859-1") + ";"); --> 한글 잘 나옵니다~
String userAgent = request.getHeader("User-Agent");
String CHARSET2 = "";
if ((mimetype == null || mimetype.length() == 0) && userAgent.indexOf("Mozilla") > -1 ) { // 사파리, 크롬일 경우
CHARSET2 = "euc-kr";
mime = "application/x-hwp;";
}
response.setContentType(mime + "; charset=" + CHARSET2);
if(userAgent.indexOf("Mozilla") > -1 && userAgent.indexOf("Chrome") < 0 ) { // 사파리
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(filename.getBytes("UTF-8"),"ISO-8859-1") + ";");
}else if(userAgent.indexOf("Mozilla") > -1 && userAgent.indexOf("Chrome") > -1 ) { // 크롬
response.setHeader("Content-Disposition",
"attachment;filename=\"" + URLEncoder.encode(filename, "utf-8") + "\";");
}
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Pragma", "no-cache;");
혹시라도 다른 좋은 정보 가지고 있으시면 알려주시구요 필요하신분 사용 하세요~
그리고 참조 url 은 http://wiki.kwonnam.pe.kr/java/servlet/download 여기서 제공 받았습니다 header 부분만 제가 알려드린대로
변경해서 적용해보시면 좋을꺼 같아요~




서버쪽의 mime type 설정하는 부분에 (tomcat의 경우 conf폴더 내의 web.xml)
<mime-mapping>
<extension>hwp</extension>
<mime-type>application/unknown</mime-type>
</mime-mapping>
를 추가해 보세요.