| sitelink1 | |
|---|---|
| sitelink2 | |
| sitelink3 | |
| sitelink4 | |
| sitelink5 | |
| sitelink6 | 
이것은 자바 팁이라기보다는 마이크로소프트 사의 인터넷 익스플로러 사용 팁이라고 봐야겠네요.
파일 다운로드할 때 인터넷 익스플로러가 자동으로 다운로드 대화상자를 띄우도록 하려면 Content-Disposition HTTP 헤더를 사용하면 된다는 것이 많이 알려져 있는 것 같습니다.
이 경우
Content-Disposition: attachment; filename=myfile.txt;
뭐 이런 식으로 처리하면 되는데 문제는 파일 이름이 myfile.txt가 아니라 현재의 인코딩(한글 윈도우라면 자바의 MS949)에서 표현할 수 없는 글자일 경우입니다.
다음 URL에서 실용적인 해법을 제시하고 있습니다. 실제 표준이라고 보기에는 아직 무리가 있습니다. 아직 unicode 파일 이름을 이 헤더에서 처리하는 표준은 명확하지 않은 것 같습니다.
* Problem in downloading a pdf file having Japanese characters in the name of the file
이 내용과 관련된 RFC는
* MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text2407
입니다.
그런데 이렇게 처리하면 UTF8로 escape되면서 너무 길어지게 되는데 IE가 헤더 길이에 한계를 두고 있어서 긴 파일 이름은 잘못 보여줄 수 있답니다.
그래서 항상 이 방법을 사용하기보다는 현재 인코딩으로 못 보여주는 유니코드 글자가 있는지 검사를 해서 그 경우에만 이 방법을 쓰는 게 좋겠습니다.
다음은 테스트를 위한 서블릿 부분 코드로, tomcat 5.0에 input/output 인코딩 모두를 ISO-8859-1로 가정하고 있습니다.
input/output 인코딩이 MS949나 EUC-KR인 경우에는 약간 수정이 필요할 것입니다.
이 방식을 사용하면 한글 윈도우에서 MS949 밖의 일본어나 중국어 글자를 가진 파일 이름도 인터넷 익스플로러 다운로드 대화상자에서 표현할 수가 있습니다.
// 사용 인코딩을 MS949로 생각하고 상수 선언합니다.
private static final String MY_ENCODING = "MS949";
... (생략)
{
... (생략)
String fileName = request.getParameter("fileName");
// 1바이트짜리라고 생각하고 톰캣이 읽어들인 것을 UTF8로 바로 잡습니다.
// 실제 IE가 UTF8로 post해야 하겠지요.
fileName = new String(fileName.getBytes("8859_1"), "UTF8");
String agentType = request.getHeader("User-Agent");
response.setContentType("application/octet-stream;");
// 톰캣이 이해할 수 있는 RESPONSE HEADER로 바꿔주기 위해 MS949에 따른 바이트
// 배열로 바꾸고 이것을 다시 1바이트짜리 String인 ISO-8859-1 인코딩으로
// 해서 String 객체를 다시 만듭니다. 만약 MS949를 기본 인코딩으로 인식하는
// 환경이라면 그냥 문자열을 사용하면 되겠지요.
// String header = "attachment; filename=" + fileName + ";";
String header = "attachment; filename=" + new
String(fileName.getBytes(MY_ENCODING), "8859_1") + ";";
// 현재 인코딩으로 다 표현할 수 있는지 여부를 검사해서, 다 표현할 수 없을
// 경우에만 RFC 2047에서 정의한 것과 유사한 방식으로 escape을 합니다.
if (!fileName.equals(new String(fileName.getBytes(MY_ENCODING),
MY_ENCODING))) {
header = "=?UTF-8?Q?attachment; filename="
+ java.net.URLEncoder.encode(fileName, "UTF-8") + ";?=";
}
response.setHeader("Content-Disposition", header);
}
			파일 다운로드할 때 인터넷 익스플로러가 자동으로 다운로드 대화상자를 띄우도록 하려면 Content-Disposition HTTP 헤더를 사용하면 된다는 것이 많이 알려져 있는 것 같습니다.
이 경우
Content-Disposition: attachment; filename=myfile.txt;
뭐 이런 식으로 처리하면 되는데 문제는 파일 이름이 myfile.txt가 아니라 현재의 인코딩(한글 윈도우라면 자바의 MS949)에서 표현할 수 없는 글자일 경우입니다.
다음 URL에서 실용적인 해법을 제시하고 있습니다. 실제 표준이라고 보기에는 아직 무리가 있습니다. 아직 unicode 파일 이름을 이 헤더에서 처리하는 표준은 명확하지 않은 것 같습니다.
* Problem in downloading a pdf file having Japanese characters in the name of the file
이 내용과 관련된 RFC는
* MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text2407
입니다.
그런데 이렇게 처리하면 UTF8로 escape되면서 너무 길어지게 되는데 IE가 헤더 길이에 한계를 두고 있어서 긴 파일 이름은 잘못 보여줄 수 있답니다.
그래서 항상 이 방법을 사용하기보다는 현재 인코딩으로 못 보여주는 유니코드 글자가 있는지 검사를 해서 그 경우에만 이 방법을 쓰는 게 좋겠습니다.
다음은 테스트를 위한 서블릿 부분 코드로, tomcat 5.0에 input/output 인코딩 모두를 ISO-8859-1로 가정하고 있습니다.
input/output 인코딩이 MS949나 EUC-KR인 경우에는 약간 수정이 필요할 것입니다.
이 방식을 사용하면 한글 윈도우에서 MS949 밖의 일본어나 중국어 글자를 가진 파일 이름도 인터넷 익스플로러 다운로드 대화상자에서 표현할 수가 있습니다.
// 사용 인코딩을 MS949로 생각하고 상수 선언합니다.
private static final String MY_ENCODING = "MS949";
... (생략)
{
... (생략)
String fileName = request.getParameter("fileName");
// 1바이트짜리라고 생각하고 톰캣이 읽어들인 것을 UTF8로 바로 잡습니다.
// 실제 IE가 UTF8로 post해야 하겠지요.
fileName = new String(fileName.getBytes("8859_1"), "UTF8");
String agentType = request.getHeader("User-Agent");
response.setContentType("application/octet-stream;");
// 톰캣이 이해할 수 있는 RESPONSE HEADER로 바꿔주기 위해 MS949에 따른 바이트
// 배열로 바꾸고 이것을 다시 1바이트짜리 String인 ISO-8859-1 인코딩으로
// 해서 String 객체를 다시 만듭니다. 만약 MS949를 기본 인코딩으로 인식하는
// 환경이라면 그냥 문자열을 사용하면 되겠지요.
// String header = "attachment; filename=" + fileName + ";";
String header = "attachment; filename=" + new
String(fileName.getBytes(MY_ENCODING), "8859_1") + ";";
// 현재 인코딩으로 다 표현할 수 있는지 여부를 검사해서, 다 표현할 수 없을
// 경우에만 RFC 2047에서 정의한 것과 유사한 방식으로 escape을 합니다.
if (!fileName.equals(new String(fileName.getBytes(MY_ENCODING),
MY_ENCODING))) {
header = "=?UTF-8?Q?attachment; filename="
+ java.net.URLEncoder.encode(fileName, "UTF-8") + ";?=";
}
response.setHeader("Content-Disposition", header);
}
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 | 
|---|---|---|---|---|
| 66 | 서블릿의 생명주기   | 황제낙엽 | 2006.08.07 | 612 | 
| 65 | 서블릿의 초기화 | 황제낙엽 | 2006.07.24 | 547 | 
| 64 | JSTL | 황제낙엽 | 2006.02.17 | 721 | 
| 63 | J2SE 5.0 Tiger 에 관해서 | 황제낙엽 | 2006.02.16 | 541 | 
| 62 | Building an eBay Rich Client using the XUI Framework | 황제낙엽 | 2006.01.13 | 568 | 
| 61 | Vector 와 ArrayList의 차이 | 황제낙엽 | 2006.02.15 | 645 | 
| 60 | Using RSS in JSP pages (Informa Project) | 황제낙엽 | 2006.01.10 | 41700 | 
| 59 | 달력만들기 | 황제낙엽 | 2005.12.22 | 786 | 
| 58 | Velocity의 GenericTools 에 있는 DateTool | 황제낙엽 | 2005.12.21 | 586 | 
| 57 | StringTokenizer 예제소스 | 황제낙엽 | 2005.12.21 | 740 | 
| » | 유니코드로 된 파일 이름을 인터넷 익스플로러에서 저장하는 방법 | 황제낙엽 | 2005.12.01 | 701 | 
| 55 | Date 클래스와 Calendar 클래스 사이에... | 황제낙엽 | 2005.12.14 | 509 | 
| 54 | 한글처리2 | 황제낙엽 | 2005.12.01 | 573 | 
| 53 | 한글처리1 | 황제낙엽 | 2005.10.20 | 684 | 
| 52 | 유니코드 관련 유틸 클래스 | 황제낙엽 | 2005.07.16 | 789 | 
| 51 | 음력 계산 로직 | 황제낙엽 | 2005.07.16 | 583 | 
| 50 | 서블릿 내장 객체 (Implicit Object) | 황제낙엽 | 2004.11.12 | 626 | 
| 49 | java.text.SimpleDateFormat 클래스를 이용하여 java.util.Date 의 객체 생성시 초기화하기 | 황제낙엽 | 2004.10.03 | 759 | 
| 48 | 서블릿에서 페이지출력 | 황제낙엽 | 2004.09.30 | 531 | 
| 47 | Web Server Page작성시 한글처리를 위한 참고사항 (자바서비스넷 링크문서) | 황제낙엽 | 2004.05.27 | 706 | 
 
							