개발 Q&A

제목 header를 이용한 파일 다운로드시 특수문자파일 에러 질문합니다.
글쓴이 beop 작성시각 2015/04/02 12:54:17
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 14000   RSS
안녕하세요.
도움을 얻고자 질문 드립니다.
아직 초짜라 어렵게 header를 이용한 파일다운로드를 구현했습니다..
문제는 특수문자를 포함한 파일명일때는 에러가 난다는 것입니다..



[view] 
------------------------------------------- 
<a href="/download/index/text.jpg">다운로드</a> 


[controller] - download 
------------------------------------------- 
$data['file_name'] = $this->uri->segment(3);  //text.jpg 입니다. 
$this->load->view('/download_v', $data); 

[view] - download_v 
------------------------------------------- 
$file = $_SERVER['DOCUMENT_ROOT']."/new/upload/brd_attch/".$file_name;  //저장되어있는 경로 입니다. 
$file = iconv("utf-8","euc-kr",$file); 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
readfile($file); 
exit; 

이런식으로 파일  다운로드가 잘됩니다. 
문제는 파일명이 test.hwp 는 다운로드가 잘되는데 
test_(1).hwp  이렇게 특수문자가 들어가면 파일을 다운로드 받으면  test_& # 4 0 이렇게 바뀌어서 다운로드가 되어 
파일이 깨집니다. 

urlencode도 해봤고 파일전부 UTF-8입니다.. 되질 않네요. 
도움 부탁 드립니다. 

감사합니다.ㅠㅠ
 다음글 테이블 최상단 고정은 어떻게 시키나요? (4)
 이전글 autocomplete에 대해서 문제가 있습니다. (4)

댓글

beop / 2015/04/02 21:55:02 / 추천 0
업로드시 이름을 변경하여 저장한 후 실제이름과 변경된 이름을 각각 디비에 담아
다운로드 경로는 변경된 이름으로 하고 파일 다운로드 이름은 실제이름을 불러와서 작업해서 일단 해결했습니다.