jsp

[JSP] DownLoad.jsp / 다운로드.jsp / 한글 파일 다운로드

바이홍 2008. 3. 21. 13:30
반응형

흑흑

쌩고생을 하면서 만든것 ㅡㅡ

비스타 IE7에서는 잘 돌아가지만 XP에서는 파일이 안받아 지는 경우가 있다

이는 소스 문제가 아니라 익스플로러 문제이다 이거때문에 고생에 고생을 거듭

이에 대한 해결방법은 자신의 컴퓨터의 설정을 바꿔주는 것이다

--해결방법--

1. 제어판으로 이동해라

2. 제어판의 국가 및 언어옵션을 선택을 해라.

3. 국가 및 언어옵션 탭중에 언어탭을 선택하고 자세히라는 버튼을 클릭.

4. 텍스트 서비스 및 입력언어창이 나타날것이다 그러면 탭중 고급을 클릭.

5. 고급텍스트서비스 사용안함에 체크 후 창을 닫으면 된다..

6. 적용버튼이 있었나?? 하여튼 그렇게 하면 해결된다



download.jsp


<%@ page contentType="text/html; charset=MS949"%> //MS949 이가 꼭 있어야 할듯 한데 잘 모름
<%@page import="java.io.*,java.util.*,java.net.*" %>

<%
request.setCharacterEncoding("euc-kr");

String filePath1 = request.getParameter("file");  //파일명을 가지고 온다

String filePath = new String(filePath1.getBytes("8859_1"), "KSC5601"); //가지고 온 파일명을 한글도 받을 수있게 변환한다


//업로드된 파일명 추출
int imgIdx = filePath.lastIndexOf("/");
String fileName = filePath.substring(imgIdx+1);

String path = "파일이 있는 폴더까지 절대경로를 줘라"+filePath;

(ex. 원도우경우 c:\programfile\download\   유닉스 /export/home/download   리눅스  /root/home/download)
File file = new File(path);

response.setContentType("application/octet-stream");

String Agent=request.getHeader("USER-AGENT");   //브라우져의 버젼을 알 수있다 흐흐
if(Agent.indexOf("MSIE")>=0){
 int i=Agent.indexOf('M',2);//두번째 'M'자가 있는 위치
 String IEV=Agent.substring(i+5,i+8);
 if(IEV.equalsIgnoreCase("5.5")){
  // filename은 순수한 파일명만
  response.setHeader("Content-Disposition", "filename="+new String(fileName.getBytes("euc-kr"),"8859_1"));
 }
 else{
  response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("euc-kr"),"8859_1"));
 }
}
else{
 response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("euc-kr"),"8859_1"));
}

byte b[] = new byte[1024];

if (file.isFile()){ 
 try {
  BufferedInputStream fin = new BufferedInputStream(new FileInputStream(file)); 
  BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream()); 
  int read = 0; 
  while ((read = fin.read(b)) != -1){
   outs.write(b,0,read);

   out.clear();  
  }
  outs.flush();
  outs.close();

  fin.close();
 }
 catch(Exception e){
  e.printStackTrace();
 }
}

%>

추가로 잘못된거 있음 알려주세요 ^^;

반응형