제목 | 멀티업로드에 do_upload를 그대로 이용하기 | ||
---|---|---|---|
글쓴이 | 하늘치 | 작성시각 | 2013/11/12 22:05:25 |
|
|||
http://stackoverflow.com/questions/11524356/multiple-files-upload-array-with-codeigniter-2-0 일단, 출처를 밝힙니다. 사실, 꼼수와 같은 방법이라 이렇게 쓰는 게 나중에 혹시나 시스템상으로 문제가 될 수도 있는 것인지.. 고수님들께서 여유가 있으실 때 확인해주셨으면 하는 바람입니다.. ^^; 보통은 업로드 프로세스 부분을 아래와 같이 쓰잖아요? /** * $upload_dir : 업로드 경로 * $field_name : <input> 태그의 name 값 */ $config['upload_path'] = realpath($upload_dir); $config['allowed_types'] = 'gif|jpg|jpeg|jpe|png'; $config['max_size'] = '2048'; $this->load->library('upload', $config); $this->upload->do_upload($field_name); 그런데, 아래처럼 파일등록을 배열로 넘길 때는 do_upload() 를 사용할 수 없더군요. <input name='userfile[]' type='file'> 그래서 검색해봤더니 해결책(???)을 누군가 내어놓았더라구요, 음.. 일단 제 입맛에 맞게 약간 변형시켰습니다. /** * ---------------------------------------- * upload_proc.php * ---------------------------------------- * $upload_dir : 업로드 경로 * $field_name : <input> 태그의 name 값 * $multi_files : 업로드파일 배열 정보 * $multi_index : 배열 index 값 */ $field_name = 'userfile'; //$cnt_field = count($this->input->post($field_name)); $cnt_field = count($_FILES[$field_name]['name']); if($cnt_field > 0) { $multi_files = $_FILES; for($i=0;$i<$cnt_field;$i++){ //$this->Model_upload->multi_upload($field_name,'upload/images'); $this->Model_upload->multi_upload($field_name,'upload/images',$multi_files,$i); } } /** * ---------------------------------------- * Model_upload.php * ---------------------------------------- * $upload_dir : 업로드 경로 * $field_name : <input> 태그의 name 값 * $multi_files : 업로드파일 배열 정보 * $multi_index : 배열 index 값 */ function multi_upload($field_name,$upload_dir, $multi_files=FALSE, $multi_index=FALSE) { $config['upload_path'] = realpath($upload_dir); $config['allowed_types'] = 'gif|jpg|jpeg|jpe|png'; $config['max_size'] = '2048'; $this->load->library('upload', $config); /** * 멀티 업로드인 경우에만 해당됩니다. */ if($multi_index !== FALSE) { $_FILES[$field_name]['name']= $multi_files[$field_name]['name'][$multi_index]; $_FILES[$field_name]['type']= $multi_files[$field_name]['type'][$multi_index]; $_FILES[$field_name]['tmp_name']= $multi_files[$field_name]['tmp_name'][$multi_index]; $_FILES[$field_name]['error']= $multi_files[$field_name]['error'][$multi_index]; $_FILES[$field_name]['size']= $multi_files[$field_name]['size'][$multi_index]; } $upload_ok = $this->upload->do_upload($field_name); } 제가 쓰는 걸 간소화시킨다고 하긴 했는데, 오류가 날지도 모르겠네요;; 퇴근시간 늦추고 쓰는 거니 혹 오류가 나더라도 이해를.. 부탁드립니다... 아무튼, 되긴 되더군요. 근데, 출처의 게시물을 읽다보니.. 어떤 분이 댓글 중에 '작동하기는 하지만, ugly 하다'고 하셨더라구요. 심정적으로 공감은 합니다만.. 아쉬운 건 저라서.. 헛헛- |
|||
다음글 | Active Record의 쿼리 캐싱 버그 (+ 수정된... (11) | ||
이전글 | CI 개발시 어떤 IDE를 쓰시나요? ^^ (11) | ||
한대승(불의회상)
/
2013/11/13 15:45:57 /
추천
0
|
하늘치
/
2013/11/13 16:30:41 /
추천
0
감사합니다. ^^
지금에서야 다시 보니, 원문과 저 부분이 달랐네요. 왜 다르게 썼을까 싶어서 제가 작업했던 소스를 뒤적여봤는데, 이런 이유였습니다. <div class="form-group"> <input type="text" id="price_1" name="goods_price[]" /> <input type="text" id="image_1" name="goods_image[]" /> </div> <div class="form-group"> <input type="text" id="price_2" name="goods_price[]" /> <input type="text" id="image_2" name="goods_image[]" /> </div> 위 소스에서처럼 파일입력만 있는 것이 아니었는지라, 업로드파일존재여부( $_FILES[$field_name]['name'] ) 대신에 input name 으로 count 했었네요.. count 값으로 for 문을 돌릴 때 그 안에서 업로드도 처리하고, DB에 다른 정보들도 입력하고 했었거든요. 물론 저는 file 타입의 name 이 아닌, 다른 text 타입의 name 으로 했지만요.. 음.. 설명하느라 사용한 단어들이 적절한 건지 모르겠네요. 헛헛;; 아무튼, 게시판에서처럼 그냥 파일만 여럿 등록하고자 할 때는 확실히, 원문처럼 하는 게 맞겠네요~ 좋게 봐주셔서 감사합니다. ^^ |
아래 부분은 원문처럼 수정 하면 좋을것 같습니다.