본문 바로가기

Programming/JAVA/JSP

파일 Download에 관한 참고

계속 업데이트 중... 인것 같다.

출처 : http://www.javaservice.net/~java/bbs/read.cgi?m=devtip&b=servlet&c=r_p&n=992449785


제목 : 파일 Download에 관한 참고
글쓴이: 김승환(kalot) 2001/06/14 01:29:45 조회수:21055 줄수:107
많은 분들이 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
=======================================
제목 : Re: ppt자료 다운로드에 관해
글쓴이: 김경수(guest) 2001/06/14 11:49:17 조회수:2587 줄수:29
안녕하세요..
항상 좋은글 많이 도움이 되고 있습니다.
ppt나 xls확장자같은경우 전 아래와같이 해서 다운로드를 받고 있습니다.
어디서 소스를 봤는지 기억은 잘 안나지만..아래는 jsp화일의 일부분입니다. 

String type 	= request.getParameter("do");
String fileurl 	= request.getParameter("fileurl");
String filepath	= request.getParameter("filepath");
String filename	= fileurl.substring(filepath.length()+1,fileurl.length());
PrintStream printstream = new PrintStream(response.getOutputStream(), true);
try {
        	File file = new File(filepath,filename);
        	FileInputStream fin = new FileInputStream(file);
        	
        	int ifilesize = (int)file.length();
        	byte b[] = new byte[ifilesize];
        	
        	response.setContentLength(ifilesize);
        	response.setContentType("application/smnet");
        	response.setHeader("Content-Disposition","attachment; filename="+filename+";");
        	
        	ServletOutputStream oout = response.getOutputStream();
        	
        	fin.read(b);
        	oout.write(b,0,ifilesize);
        	oout.close();
        	fin.close();	
} catch(Exception e) {  }
제목 : Re: 파일다운로드, 늦었지만 마무리합시다.
글쓴이: 손님(guest) 2002/10/09 04:21:22 조회수:1803 줄수:14
거의 일년하고 4개월이 지난글인데.. 마물이 없어서 그래도 새로 보는 사람들을 위해서 마물합시다.

response.setHeader("Content-Disposition","attachment; filename="+filename+";");

요부분인데여..
response.setHeader("Content-Disposition"," filename="+filename+";");

요것처럼 attachment; 가 빠지면 바로 열리구염

response.setHeader("Content-Disposition","attachment; filename="+filename+";");
요것처럼 달려있으면 다이얼로그창이 열립니다.

이상..
제목 : Re: 혹시 저기 다운받는 부분에서 다른이름으로...
글쓴이: 우희정(jeeyo) 2004/08/26 14:09:06 조회수:747 줄수:4
지근 제가 구현한것은 파일은 숫자로된 이름이 있고..원래 제목은 따로 저장되는 구조거든요..
이걸 다운받을때 따로 숫자로 된 이름말고..따로 저장된 이름으로 바꿔서 저장되게 하고 싶은데...
그게 가능할까요?
제목 : Re: 다른이름으로 변환은...
글쓴이: 전득진(oeegee) 2004/09/12 19:08:35 조회수:534 줄수:4
실제 파일을 꺼내와서 파일객체로 만든후 원래 파일이름을 입힙니다.

그리고 그 객체를 jsp 페이지에 링크시켜줍니다...
제목 : Re: 엑셀,워드,파워포인트등의 파일이 저장되 되지 않고....
글쓴이: 윤석언(tampico) 2005/09/02 16:56:44 조회수:974 줄수:18
엑셀, 워드, 파워포인트 등의 파일이 저장되 되지 않고 바로 익스플로어에서 열리는 
것은 MS Office를 설치한 후 발생하는 현상일껍니다.

이것은 클라이언트측이 확장자를 인식해서 IE에 Plug in 된 엑셀,워드 프로그램에 의해
자동처리 되는 것인데요 이게 서버의 설정이나 헤더 조작으로 해결되지 않는걸루 알고 있습니다.

음.....
이 경우 클라이언트에서 설정을 바꾸면 원하는 상태로 되기는 합니다.

Windows 2000 기준으로 말씀드리면

탐색기 > 도구메뉴  > 폴더옵션 > 파일형식탭 > [원하는 파일형식(확장자)선택] > 
고급 버튼  > New 선택  > "다운로드 후 열기 확인" 체크

방법으로 해결할 수는 있습니다.
그러나 이러한 방법을 모든 사용자에게 숙지시켜 다운로드 > 저장 시킬 수는 없는 노릇입니다.
제목 : Re: 오피스파일은 무조건 다운로드되도록 헤더만 바궈주면됩니다.
글쓴이: 손님(guest) 2007/05/08 17:09:18 조회수:704 줄수:11
다운로드 부분에 

response.setContentType("application/x-filler; charset=KSC5601");


해주시면됩니다.

x-filler 대신에 확장자 인식못하는 아무문자 넣으셔도 될듯하구요

제목 : Re: 문의-대용량 파일일 경우 문제
글쓴이: 엔니오(guest) 2009/10/30 16:39:06 조회수:298 줄수:8
대용량 파일일 경우 아래 부분에서 out of heap memory 가 발생합니다.

byte b[] = new byte[ifilesize];


위처럼 new byte 를 해서 생기는 문제가 발생하지 않도록 하고 싶은데

조언 부탁드립니다.

'Programming > JAVA/JSP' 카테고리의 다른 글

OutOfMemory 해결 방법?  (0) 2010.02.11
Java && Excel 연동  (0) 2010.02.11
JSP 페이징 처리 구현 하기  (0) 2010.02.03
[펌] [Java] replaceAll 로 공백 제거하기  (0) 2009.09.16
[JAVA] BigInteger 사용 하기  (0) 2009.09.15