2012/06/07 19:04

파일 다운로드 하기.. JAVA



웹스퀘어라는 놈, 참 친해지기 어렵다.;; 줴길.. 

업로드도 파일업로드 콤포넌트가 websquare.xml에 설정해놓은 위치로 자동으로 올려버리고...
(음,,, 이건 편리한 기능인건가..;;;;;; 그런거 같기도.. )
암튼,, 
난 당연히 multipart form 형식으로 보내서 controller에서 처리하려고 했단 말이다!! -_- 줴길.. 

허허;; 

그래서 다른방법이 없다 한참 고민하다가, 차장님의 도움으로,,;; 
(난 창의적인 생각이 잘 들지 않는 정말 FM 개발자 이기 떄문에.;;;;)

웹스퀘어 콤포넌트로는 temp폴더에 올려두고, 
해당 데이터를 그리드에 남겨 저장을 할때 temp에서 실제 프로젝트에서 원하는 
위치로 업로드 하는 것으로 변경했다.. coooooooooooooooooooooooooool;;

암튼,, 그렇게 업로드는 해결했고,
다운로드는 머 수월하게.......
하는 듯 했으나.. 

갑자기 등장한 한글 파일명이 꺠지는 현상 -_-

머 당연히 인코딩, 디코딩으로 해결 했는데, 
문제는 URLEncoder.encode(fileName,"UTF-8") 요고를 하면서
파일명에 들어있는 공백이 '+'로 표시된다는 것.. 

줸장할..
이래저래 찾아보고 뒤져보고 난리를 쳤지만,,
결론은... +를 replace하는 것;;
좀 황당한 결론이긴 한데.. 그게 맞는 듯 하다.. 
몇시간의 삽질을 뒤로하고,
다시는 안 잊어먹으리라 다짐하며.. ㅋ

아래는 sample소스.. 

File uFile = new File(filePath);
int fSize = (int) uFile.length();

if( fSize > 0 ) 
{
BufferedInputStream in = new BufferedInputStream(new FileInputStream(uFile));

String mimetype = new MimetypesFileTypeMap().getContentType(uFile);

response.setBufferSize(fSize);

//파일 다운로드시 파일명이 깨지는 현상 해결..
response.setContentType(mimetype + "; charset=utf-8");
String fileNm = URLEncoder.encode(fileName,"UTF-8").replace('+', ' ');
response.setHeader("Content-Disposition", "attachment;fileName=\""+fileNm+"\";");
response.setContentLength(fSize);

FileCopyUtils.copy(in, response.getOutputStream());

in.close();
response.getOutputStream().flush();
response.getOutputStream().close();


덧글

댓글 입력 영역