CI 묻고 답하기

제목 파일업로드가 두개라면,
글쓴이 수야디벨 작성시각 2013/07/16 12:06:21
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 13863   RSS
 
안녕하세요.

궁금한게 있어서 질문드립니다.

만약에 파일 업로드가 한 페이지에 두개가 필요하다면, 

어떤식으로 구현해야 할까요 ?


지금까지는 한 페이지에 파일 업로드 기능이 하나만 있으면 되었기에,

이런 문제에 부딪혀 보지 않았거든요 .

그런데 이번에 한 페이지에 파일업로드 기능이 두개 (하나는 이미지, 하나는 파일)가 따로따로 있어야 해서,

두개를 적용하다 보니 문제가 발생한겁니다 .



하나일때는 ,

아래 소스를 view에다가 구성해 주고 ,


<?= form_open_multipart('upload/do_upload');?>

 
<input type="file" name="userfile" size="20" />
<input type="submit" value="upload" />

 
</form>

이를 controller에서 
function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width']  = '1024';
$config['max_height']  = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}


이렇게 받으면 되잖아요? (매뉴얼처럼..)

그런데 여기서 , view에서 보내주는 파일 업로드의 name이 userfile 일때만 받아지는거 같더라구요.

컨트롤러의 받는 부분에선 userfile이라는name을 사용하진 않는거 같은데 .. 착각인가 ...


아무튼, view에서 파일 업로드가 두개면, 어떻게 해야 하는건가요??


ps.

<?= form_open_multipart('upload/do_upload');?> 이거로 같이 묶어 주기에는 

코딩상 서로 멀리 떨어져 있습니다.



 다음글 application -> modules 폴더에 ... (2)
 이전글 에러처리 관련질문드립니다. (14)

댓글

변종원(웅파) / 2013/07/16 12:35:34 / 추천 0
같이 묶어주기 힘들면 2번 돌리시면 되죠.

매뉴얼 보시면 userfile 대신 다른 파일명 쓸경우에 대한 것이 나와있습니다.
하나는 userfile, 다른건 usefile1 요래 처리하면 되겠죠.
수야디벨 / 2013/07/16 13:27:31 / 추천 0
 웅파//

제가 착가한 부분이 있는데 ,

같은 <?= form_open_multipart('upload/do_upload');?> 으로 묶여있네요ㅠ

그래서 submit을 누르면 한번에 모든 input 데이터가 upload컨트롤러 넘어가는데 .

웅파님 말씀대로 매뉴얼을 보니 


$field_name = "userfile2"
$this->upload->do_upload($field_name);

이렇게 하면 된다고 나와 있는데요 , 이걸 controller에다가 적용해봤습니다.

function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width']  = '1024';
$config['max_height']  = '768';
 
$this->load->library('upload', $config);

$field_name = "userfile2";
$this->upload->do_upload($field_name);

 
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
 
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
 
$this->load->view('upload_success', $data);
}
} 


이렇게 하였을 경우에 userfile2를 받을 수 있다는게 아닐까요?

이렇게 하였을 경우 보통, 파일은 선택하지 않았다는 메세지는 

하나만 나오는데,  이렇게 했을 경우에는 두개가 나오더라구요

You did not select a file to upload.

You did not select a file to upload.

이런식으로 .. 이런 오류메세지 보면, usefile은 베이스로 깔려 있는 거고,

새롭게 필드명을 넘겨 줌으로써 

컨트롤러가 두개의 upload를 받을려고 하는건가? 

하고 유추해 볼 수 있는데, 파일을 선택했음에도 저렇게 뜬다는건 ..

아니면

$field_name1 = "userfile1";
$this->upload->do_upload($field_name1);

$field_name2 = "userfile2";
$this->upload->do_upload($field_name2);


이렇게 해야하나요? 그런데 컨트롤러의 함수이름을 다른걸로 대체했습니다.

매뉴얼에서는 do_upload 지만 저는 file_upload로 변경했거든요 ..

그런데도 함수이름은 do_upload라고 쓰는게 맞는거지요?

(컨트롤 아래에 봐보면 if문에 
! $this->upload->do_upload() 되어있는데, 이때의 do_upload는 제 함수명
이랑은 상관 없었기
 때문에 그렇게 생각함..)


하 ..그런데 왜 안받아지는걸까요?ㅠ

파일을 선택하지 않았다는 오류 메세지만 나오는데 ..

변종원(웅파) / 2013/07/16 14:23:44 / 추천 0
두번 돌리라는게 다른게 아닙니다.

$this->upload->do_upload($up1);
$this->upload->do_upload($up2);

수야디벨 / 2013/07/17 15:42:34 / 추천 0
 웅파//

아 ..하루만에 무슨소리인지 알았어요 ;;

어제부터 웅파님 답변 보고 저게 무슨 소리일까 .. 하고 계속 생각하고 생각했거든요


웅파님은 모든걸 다 알려주셨는데 제가 그걸 이제야 알아들었네요 

결국 해답을 찾았네요 ㅎㅎ 감사합니다 ㅎㅎ
변종원(웅파) / 2013/07/17 17:37:05 / 추천 0
수야디벨/ 홧팅~~~~ ^^