상세 컨텐츠

본문 제목

[Spring]IE HWP 파일 다운로드 시 브라우저로 읽는 문제점, 여러가지 해결을 시도해보았습니다.

Development/Spring

by J-Developer 2020. 5. 4. 16:29

본문

반응형

HWP 업로드 시 크롬에서는 다운로드 잘 되는데, IE에서는 다운로드 시 한글도 깨진 상태로 브라우저가 읽어서 보여주는 경우가 간혹 있다.

 

 

 

그래서 여러 가지를 시도해 보았다.

 

 

 

1. a태그에 download 속성 붙이기

 

이건 이미 IE에서 통하지 않는 걸로 알고 있었으나 그래도 혹시 몰라 붙여보았다.

<a href="/file/${fn:toLowerCase(vo.bbsName)}/${vo.fileName}" download>${vo.fileName}</a>

역시나 IE에서는 통하지 않았다.

 

 

 

 

2. Tomcat conf/web.xml에 mime-mapping 추가

 

tomcat이 설치되어 있는 경로에서 conf/web.xml을 열어서 mime-mapping 하단에 추가하였다.

 

구글링 검색 시 application/x-hwp 이렇게 추가하라는 사람도 있었고, application/unknown 이것을 추가하라는 사람도 있었다.

어떤게 정답인지는 모르겠지만 나는 application/unknown 이걸로 추가하였다.

<mime-mapping>
  <extension>hwp</extension>
  <mime-type>application/unknown</mime-type>
</mime-mapping>

솔직히 이것만 하면 해결될 줄 알았으나 해결이 되지 않아서 application/x-hwp 이렇게 변경을 해보아도 결과는 같았다.

 

 

 

 

3. WEB-INF/web.xml에 mime-mapping 추가

 

WEB-INF/web.xm에 mime-mapping 설정을 어디선가 본 기억이 있는 것 같아서 추가를 해보았다.

<mime-mapping>
    <extension>hwp</extension>
    <mime-type>application/unknown</mime-type>
</mime-mapping>

별 기대를 안 하고 해 본 것이지만 역시나 해결이 되진 않았다.

 

 

 

 

4. 파일명 URL Encoding

혹시나 파일 이름이 한글이라서 안 되는 것일까?

의구심이 생겨 파일명을 URL Encoding을 해보자는 생각을 했다.

하지만 해당 코드가 JSTL로 되어있어서 JSTL에서는 URL Encoding을 어떻게 해야 하는지 검색을 해보았다.

<c:url value="/yourClient" var="url">
  <c:param name="yourParamName" value="http://google.com/index.html" />
</c:url>
 
<a href="${url}">Link to your client</a>

 

JSTL은 해당 라이브러리를 사용하여 저렇게 하면 되는데, 문제는 이 소스의 URL은 Pathvariable로 되어있더라.

그래서 Pathvariable로 되어있는 URL은 JSTL로 어떻게 Encoding을 해야 하는지 검색을 해보아도 딱히 답이 없어 보였다.

그래서 그냥 Java에서 파일 리스트를 가져올 때 반복문을 돌려서 URL Encoding을 했다.

 

if( !CollectionUtils.isEmpty(oldAttachFileList) ) {
        	
        	for( EgovMap vo : oldAttachFileList ) {
        		
        		String fileName = (String) vo.get("fileName");
        		String encodeFileName = URLEncoder.encode(fileName, "UTF-8");
        		
        		vo.put("encodeFileName", encodeFileName);
        		
        	}
        	
}

이렇게나 해보았지만 소용이 없었다.

 

 

 

 

5. Apache Server mime.types와 httpd.conf 설정 추가

이제는 뭘 해봐야 하지 고민을 하고 있었는데 생각을 해보니 이 운영서버는 아파치 웹 서버를 띄우고 있다는 생각이 들었다.

그래서 아파치 쪽의 설정을 변경해보면 될 것 같다는 생각에 구글링을 해보았다.

 

찾아보니 mime.types과 httpd.conf를 수정하면 된다고 하더라.

 

mime.types

application/x-hwp				hwp frm hwt

 

httpd.conf

AddType application/x-hwp .hwp .frm .hwt

 

해당 설정 부분 후정 후 아파치를 재시작하였지만 문제는 해결이 되지 않았다.

더 이상 어떻게 해야 할지 몰라 회사 선배에게 물어보니 jQuery filedownload.js를 사용해보라고 하더라.

 

 

 

 

6. jQuery filedownload.js 적용

 

구글에 jQuery filedownload.js로 검색을 해서

https://github.com/johnculviner/jquery.fileDownload/blob/master/src/Scripts/jquery.fileDownload.js

 

johnculviner/jquery.fileDownload

jQuery File Download is a cross server platform compatible jQuery plugin that allows for an Ajax-like file download experience that isn’t normally possible using the web. - johnculviner/jquery.file...

github.com

해당 링크에서 소스를 긁어 js파일로 만들었다.

 

 

filedownload.js
0.02MB

 

 

그리고 JSP 쪽에서 해당 태그를 클릭했을 때 이벤트 소스를 수정하였다.

<a href="javascript:;" data-old-file-url="/file/${fn:toLowerCase(vo.bbsName)}/${vo.encodeFileName}">${vo.fileName}</a>

$( document ).ready(function() {
    
	$("[data-old-file-url]").on("click", function() {
		
		var url = $( this ).attr("data-old-file-url");
		
		$.fileDownload(url,{
		  httpMethod: "POST"
		});
		
	});
	
});

적용 후 테스트를 해보니 드디어 IE에서 한글파일이 정상적으로 다운로드가 되더라...

나중에 까먹을지도 모르니 이 방법들은 기록해두는것이 좋을 것 같다.

반응형

관련글 더보기

댓글 영역