티스토리 뷰

728x90

직접 URL 방식일때는 아무 문제가 없었는데 (ex <a href="www.xxx.com/test.apk">다운로드</a>)

파일 객체를 만든 후 out.write로 보내는 방식으로 했더니

무슨 짓을 해도 다운로드가 되질 않았다

그런데 아이폰에서는 다운로드가 되는 것이다.... OTL


서버에서는 친절하게도 "Software caused connection abort: socket write error" 이런 메세지까지 띄워줬다

요청이 끝나기 전에 페이지를 이동해버려서 그렇다는 내용을 어딘가에서 봐서

혹시나 싶어서 form 전송으로 다운로드를 요청하던 방식을 href 로 바꿔주었더니 다운로드가 잘된다...

도대체 왜 이런것인지는 모르겠지만.. 어쨌든 잘 되니 다행이다..


ㅇ 기존 방식

frm.action = "/mobile/download.do";

frm.target = "iframe_download"; // iframe

frm.submit();


ㅇ 변경 방식

location.href = "/mobile/getObject.do?req_nm=xxxx&req_seq=oooo";


그런데!!! 갤럭시S 에서는 다운로드가 안된다.. OTL

파일 객체를 쏴줄때 mime type도 바꿔보고 별짓 다 해봤는데도 안된다   (/--)/ ㅛㅛ   일단 보류..

=====================================================================

파일 다운로드를 담당해주는 클래스에서 Content Type을 "application/octet-stream" 로 지정해주고 있는데

이걸 지정하지 않으니까 다운로드가 된다

여기서 type을 지정하지 않으면 톰캣 web.xml에서 정의해놓은 type을 따라가는 것 같은데

이상한 점은 분명 web.xml에 타입들이 정의되어 있는데도 모든 파일이 확장자가 html로 다운로드 되고 있다.. =_=;; 

========================================================================================================

갤럭시S 에서도 드디어 해결되었다 -_-v

열심히 외국사이트를 구글링 해보니.. 확장자를 대문자로 하면 된다는 사실을 알게 되었다


이유는 모르겠지만.. 어쨌든.. 대충 이런식으로..

String ext = fileName.substring(fileName.lastIndexOf(".") + 1).toUpperCase(); // 확장자를 대문자로

fileName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + ext;


며칠 고생한 끝에 결국 해결했다고 생각했는데... 이런 망할! 특수문자가 있으면 또 문제가 생긴다..

특수문자나 한글 문제는 서버 / 개발 환경에 따라서 다소 차이가 있으므로 100% 답은 없겠지만.. 
내 경우는 몇번 삽질한 끝에 이렇게 해결했다 

JSP 에서 자바 클래스로 다운로드할 파일명을 보낼때는
==> encodeURIComponent(fileName)

다운로드를 담당하는 클래스에서는
==> fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
      response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\";");

URLEncoder.encode(fileName, "UTF-8");
이런 것도 있고 여러가지 방식이 있는데 이건 각자 환경(브라우저)에 맞게 세팅해줘야 될것 같다

ㅋㅋ 어쨌든 이제 특수문자 + 한글 등으로 구성된 파일도 다운로드가 잘된다...

=====================================================================

아.. 착각이었다

아이폰은 실험을 안해봐서 모르겠고.. 안드로이드 브라우저에서는 특수문자가 안된다는 결론이다..

무슨 짓을 해도 특수문자는 _(언더바) 형태로 넘어온다

네이버 같은 대형 포털사이트에서도 이 부분은 처리를 못하고 있는걸 확인했다 =_=
(네이버는 아예 다운로드 조차 되질 않는다 ㅋㅋ)

업로드할때도 특수문자가 포함된 파일은 선택 조차 되질 않는다... 이건 구글에서 바꿔주지 않는한 무기한 보류!!