CI 묻고 답하기

제목 파일 업로드
글쓴이 작성시각 2013/09/04 17:30:43
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 27798   RSS

$config['upload_path']  = './static/user';  // 사용자가 업로드 한 파일을 /static/user/ 디렉토리에 저장한다.   
   $config['allowed_types']  = 'gif|jpg|png';  // git,jpg,png 파일만 업로드를 허용한다.   
   $config['max_size']   = '0';     // 허용되는 파일의 최대 사이즈   
   $config['max_width']   = '0';     // 이미지인 경우 허용되는 최대 폭   
   $config['max_height']   = '0';     // 이미지인 경우 허용되는 최대 높이
   $this->load->library('upload', $config);

   if ( !$this->upload->do_upload("upfile")){
    $error = array('error' => $this->upload->display_errors());
    echo "파일업로드 실패:".var_dump($error);
    exit;
   }else{
    $data = array('upload_data' => $this->upload->data());
    var_dump($data);
   }

   $this->tboard1_model->binsert($B_id, $this->input->post('subject'), $this->input->post('name'), $this->input->post('contents'), $this->input->post('data'));


===========================================================

너무 답답하네요.. ㅠㅠ
코드이그나이터를 첨 써보고 있습니다.
파일은 잘 업로드 되고 있는데


1. 파일명이 한글일때 ?? 와 같이 서버에 업로드 됩니다. 원래 명칭대로 한글로 저장하려면 어찌해야할까요?
2. $this->tboard1_model->binsert($B_id,~~ 요로케 넘겨줘서 model 파일에서 DB에 파일명을 저장해야하는데..
업로드된 파일명을 어떻게 변수로 넘기는지 모르겠습니다.


http://jjnkj.cafe24.com/codeigniter/index.php/tboard1/bwrite/1

제가 연습하고 있는 게시판입니다.
도와주세욤~ ㅠㅠ
 

==================================================================


컨트롤쪽
파일 업로드 부분의 소스를

}else{
    $upload_data = $this->upload->data();   
}

이렇게 수정했습니다.
이제 DB에 파일명을 넘기고 받는게 다 되는데요..

정작 model 페이지에서는
 

Message: Use of undefined constant file_name - assumed 'file_name'

이런 경고문이 뜹니다.

public function binsert($B_id, $subject, $name, $contents, $upload_data){
  $this->db->set('wdate', 'now()', false);//시간
  $this->db->insert('tbaord'.$B_id, array(
   'subject'=>$subject,
   'name'=>$name,
   'contents'=>$contents,
   'upfile'=>$upload_data[file_name]));
 }

변수는 이런식으로 전달해서 넣었습니다.
'upfile'=>$upload_data[file_name])
이 부분이 문제인데..
뭐가 문제인거죠? 값은 잘 저장이 되는데 어떻게 수정해야 에러문구를 없앨수 있을까요?


이렇게 저렇게 해보다가 변경해보니 파일명이 들어가긴 하는데
제가 한 방법이 맞는건가요?



 

 다음글 페이지 로딩시간이 1초 이상 걸립니다. (21)
 이전글 세션 만료시간을 갱신하는법이 없을까요? (5)

댓글

변종원(웅파) / 2013/09/04 19:07:11 / 추천 0
1. ci파일 캐릭터셋 변경없이 utf-8인 상태라고 가정하고

$config['encrypt_name'] = TRUE; 설정 추가하고 (한글파일명을 랜덤하게 암호화된 이름으로 바꿔줍니다.)

파일저장할때는 file_name으로 하고 원래 이름은 orig_name을 사용하면 됩니다.

업로드 매뉴얼 맨 하단의 배열 아이템 설명 참고하세요.


화면에 보여줄때는 org_name을 보여주고 다운로드할때는 file_name을 사용합니다.


2. binsert(......, $data) 로 넘기세요.  $this->input->post('data')가 아닙니다.
프로그램에서 업로드한 결과를 $data 변수에 담았으니 그대로 넘겨서 사용할 수 있습니다.
배열 내용은 모델함수 내부에서 var_dump($data) 해보세요.

양승현 / 2013/09/05 08:31:51 / 추천 0
안나오는 데이터는 라인단위로 찍어보는게 최고이죠^^
/ 2013/09/05 13:42:22 / 추천 0
감사합니다 ^^ 일단 파일 업로드까진 잘 되네요 다행히..
이제 에러만 없애면 될터인데 왜 에러가 나는지..
에러가 나는데 이상없이 동작은 하고......몰까욤. ㅠㅠ