이 포스팅에는 첨부파일의 다운로드 로직은 포함되어 있지 않습니다.
오전에 전화가 왔다.
첨부파일 다운로드가 안된단다.
네? 확인해보겠습니다.
이순간 나는 이 확인이 밤늦게까지 지속될지는 전혀 알지 못했다.
증상
1. IE에서 안된다.
2. 크롬에서 잘된다.
3. IE에서 개발자도구(F12)를 켜면 잘된다.
DB데이터
DB에 저장되어 있는 첨부파일의 데이터
쿨하게 파일의 실제 파일명과 DB의 파일명이 똑같이 저장되어 있다.
왜 이런 증상이 나는지 알아내기 위해 구글링을 수백번은 한 것 같다.(진짜다)
구글링의 결과 원인은 톰캣 url 텍스트가 인코딩이 안되는 문제인 것 같다.(확신이 없었다.)
구글에서 찾아낸 해결방법
1. 톰캣의 server.xml 에서 Connector 태그에 URIEncoding="UTF-8" 을 추가한다.
1 2 3 4 5 | <Connector connectionTimeout="20000" port="11" protocol="HTTP/1.1" redirectPort="1111" URIEncoding="UTF-8"/> <Connector port="1111" protocol="AJP/1.3" redirectPort="1111" URIEncoding="UTF-8"/> | cs |
(Connector 태그가 두군데 있다 두군데 모두 추가해준다.)
안된다. 헤헤
또다시 구글링을 시작하였다.
이과정에서 첨부파일 다운로드할때 url이 어떻게 인코딩되서 넘어가는지 디버깅도 해보고 피들러로 리다이렉트로 넘어가는 데이터를 확인해봤는데 역시나 인코딩이 안되는것 같다
(이거 밖에 말이 안되지만 아직도 확신은 못했다.)
일단 화면단에서 첨부파일 url 을
1 2 3 4 | <a href="/download/?flag=BOARD_OFFICIAL&sc=P& orgn=${inveManaDTO.attach1}& fn=${inveManaDTO.systemAttach1 }"> ${inveManaDTO.attach1 }</a> | cs |
이렇게 하고 있는데 수백번의 구글링을 통해 망할놈의 IE는 리다이렉트일때 인코딩하는게 랜덤이란다...빌게이츠 형 나한테 왜이래? ㅠㅠ 크롬은 이쁘게도 알아서 인코딩을 해준단다 헤헤 갓구글!!
결국 원인은 html 영역에서 url 텍스트에 바로 제이쿼리로 값을 박아 넣으면 이런 문제가 발생하는 것 같다.(html 과 제이쿼리에 대한 이해가 필요해 보인다..)
결론
1 2 3 4 5 6 7 | <c:url value="/download/" var="attach1"> <c:param name="flag" value="BOARD_OFFICIAL" /> <c:param name="sc" value="P" /> <c:param name="orgn" value="${inveManaDTO.attach1}" /> <c:param name="fn" value="${inveManaDTO.systemAttach1}" /> </c:url> <a href="${attach1}">${inveManaDTO.attach1 }</a> | cs |
이렇게 jstl 태그를 이용해 url을 작성했다.
url에서 param으로 넘겨줄 값들을 각각 c:param 에서 작성하니 더 직관적인 코드가 되었다.
(겉모양만 생각한 감상평)
이렇게 하니 인코딩이 잘되어 넘어가더라.. 이렇게 마무리한 시점이 밤10시 였다. 헤헤ㅠ....