일반 파일 Download로직 구현시에 참고할만한 내용

황제낙엽 2006.12.27 14:33 조회 수 : 2247 추천:266

많은 분들이 download.jsp등이나 서블릿을 이용해서 download를 구현을 합니다.

그 이유는 download를 통해서 down을 받게함으로서 직접적인 파일의 경로를

감추어 서버의 파일구조를 감추려는 보안적인 이유도 있을 것이고

또 download.jsp안에서 session에 값을 체크하여 인증절차를 거쳐야

자료를 받을 수 있게 하기 위한 것일 수도 있고

request.getHeader("referer")를 가지고 이전 페이지 url을알아내거나

HTTP Headers Information중 Host를 체크하여 무단적인 링크를 방지하기

위한 이유등 많은 이유로 처리를 하고 있을 것입니다.

저는 download를 구현함에 있어 같은 질문이 자주 올라오는 것 같아서

그런 내용들에 대해서 간단한 답변들을 적어보도록 하겠습니다.

1. 다운로드시 익스플로러 5.5 버전에서만 제대로 안되요.

이것 버전에 따라서 Header를 다르게 설정해줘야 합니다.

중략... if( strClient.indexOf("MSIE 5.5") != -1 ) { response.setHeader("Content-Type", "doesn/matter;"); response.setHeader("Content-Disposition", "filename=" + strFileName + ";"); } else { response.setHeader("Content-Type", "application/octet-stream;"); response.setHeader("Content-Disposition", "attachment;filename="+strFileName + ";"); }; response.setHeader("Content-Transfer-Encoding", "binary;"); response.setHeader("Content-Length", ""+file.length()); response.setHeader("Pragma", "no-cache;"); response.setHeader("Expires", "-1;"); 중략..
위의 소스와 같이 HTTP Response Headers의 User-Agent를 체크해서 버전이 5.5일경우와 그외 버전일 경우 header를 다르게 설정해줘야 합니다. 2. 파일 다운로드우 이상한 문자가 앞에 추가가 됩니다.(서버에 파일은 문제없음) 이것은 jsp일때 앞부분에 page지시자를 기술할때 다른 내용이 들어가서 그문자가 파일에 추가되어 나타나는 현상입니다. 해결방법은
<%@ page language="java" import="java.util.*,java.io.*,java.sql.*,java.text.*"%> <% String file_path = "D:/resin/webapps"+request.getParameter("file_path"); 중략..
과 같이 Enter를 입력해서 벌어진 부분을
<%@ page language="java" import="java.util.*"%><% String file_path = "D:/resin/webapps"+request.getParameter("file_path"); 중략..
과 같이 붙여서 만들어주면 해결할 수 있습니다. 3. 엑셀, 워드, 파워포인트 등의 파일등이 저장되 되지 않고 바로 익스플로어에서열려요. 이문제는 아직 해결을 못했는데 불가능 할꺼 같습니다. 그 추정근거를 써보면. HTTP Request Headers 중에서 Accept부분을 확인해보면 Office가 깔린 컴은
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-comet, */*"
라구 나오구 안깔린 컴은
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
라구 나옵니다. 아마도 Accept라는 건 자동으로 브라우저에서 인식가능한 것을 나타내는거 같은데요. Office를 깔면 자동으로 그 내용이 추가됩니다. 그러니까 특별히 파일확장명을 변경한 다든지 등의 방법이 아니면 안되는거 같습니다. 어떠한 편법이 있을지도 모르겠지만 아직 확인된 바가 없습니다. 어떤분은 아파치 서버에서 설정할 수 있다고 하시던데 제가 저희 네트워크 관리하는 분께 "아파치에서 설정할 수 있을까요?" 라고 물었더니 우리 네트워크 관리하시는 분 왈(曰) "그건 클라이언트에서 설정된거라서 서버에선 어떻게 할수가 없어 파일명을 바꿔주던지 아님 오피스를 지우라고 해" 라고 하시더군요. ^^ 어쨋든 해결책을 알게 되면 알려드리도록 하죠. ======================================= Home : 디지탈 박스 dizbox 아직은 미완성인... E-mail : kalot@hitel.net ICQ # : 43447821 =======================================
번호 제목 글쓴이 날짜 조회 수
347 java.util.Optional 에서의 map() 함수의 이해 황제낙엽 2026.06.24 666
346 linux(ubuntu) 의 jdk 21 이 설정된 환경에서 jdk 17 로 다운그레이드 절차 황제낙엽 2025.09.22 1532
345 [ChatGPT] javax.* 패키지와 jakarta.* 패키지의 혼합 사용 방안 황제낙엽 2025.04.15 2458
344 [ChatGPT] *.servlet.http.HttpServlet 클래스를 사용할 수 있는 주요 WAS 목록 황제낙엽 2025.04.14 2038
343 [ChatGPT] JDBC API에서 java.sql과 javax.sql 패키지의 차이점 황제낙엽 2025.01.31 2218
342 jakarta.servlet 패키지를 이용한 File Upload 구현 (2024.03.03, Servlet 5.0) 황제낙엽 2025.01.02 2310
341 [ChatGPT] Java EE가 Jakarta EE로 전환 황제낙엽 2025.01.01 2525
340 [ChatGPT] File.delete() 함수로 파일 삭제가 되지 않는 경우 황제낙엽 2024.12.10 2809
339 [ChatGPT] <jsp:include>에서 flush="true"를 설정시의 몇 가지 문제점 과 대안 황제낙엽 2024.07.19 2493
338 [Copilot] JSP, Servlet, web.xml, mysql 한글 설정 황제낙엽 2024.07.12 2555
337 Base64 클래스의 encode, decode 에서 URL-safe 황제낙엽 2024.07.10 2624
336 [Copilot] JSP 에서 다른 페이지를 현재 페이지에 포함시키는 문법 (include) 황제낙엽 2024.06.26 2570
335 Exception 출력에 대한 고찰 황제낙엽 2024.06.10 2198
334 google-auth-library-oauth2-http 라이브러리 다운로드 황제낙엽 2023.11.19 4025
333 firebase-admin-java 라이브러리 다운로드 (firebase admin sdk library) 황제낙엽 2023.11.19 2805
332 Enum 활용 (개인블로그, Effective Java) file 황제낙엽 2023.11.02 2759
331 Enum 활용 (우아한기술블로그) file 황제낙엽 2023.11.02 2790
330 servlet name 에 camel case 를 사용해서는 안되는 이유 황제낙엽 2023.10.24 2508
329 org.apache.commons.fileupload.servlet.ServletFileUpload 이용 예시 황제낙엽 2023.08.25 3336
328 ServletFileUpload.parseRequest() 실행 결과 리스트가 비어있는 오류 황제낙엽 2023.08.25 2935