개발 Q&A

제목 파일업로드시 확장자 검토 방법
카테고리 PHP
글쓴이 난만이 작성시각 2018/06/08 15:57:31
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 16668   RSS

구글링 하면서

파일을 여러개 선택해서 파일을 한번에 업로드 할 수 있게는 만들었습니다.

 

------------ 컨트롤러 ------------

$files = $_FILES;

$filesCount = count($_FILES['userfile']['name']);

for($i=0; $i<$filesCount; $i++) {

    $_FILES['userfile']['name'] = $files['userfile']['name'][$i];

    $_FILES['userfile']['type'] = $files['userfile']['type'][$i];

    $_FILES['userfile']['tmp_name'] = $files['userfile']['tmp_name'][$i];

    $_FILES['userfile']['error'] = $files['userfile']['error'][$i];

    $_FILES['userfile']['size'] = $files['userfile']['size'][$i];

    $config = array(

        'upload_path' => 'uploads/files/',

        'allowed_types' => 'dwg|hwp|doc|docx|ppt|pptx|txt|xlsx|xls|pdf|jpg|jpeg|gif|png|zip|7z|alz|rar',

        'encrypt_name' => TRUE,

        'remove_spaces' => TRUE

    );

    $this->load->library('upload', $config);

    $this->upload->initialize($config);

    if(!$this->upload->do_upload('userfile')) {

        $data['error'] = $this->upload->display_errors(); 

        echo $data['error'];

        $this->load->view('write_v', $data);

    } else {

        $uploadData = $this->upload->data();

        $uploadData['table'] = $this->uri->segment(2);

        $uploadData['pid'] = $result;

        $this->Community_m->insert_file($uploadData); 

    }

}

 

------------ 뷰 ------------

<input type="file" class="input-xlarge" id="input23" name="userfile[]" value="<?=set_value('userfile')?>"

 

 

 

그런데 현재 이 게시판에서처럼

"파일첨부"를 클릭하여 특정파일을 선택했을 경우

"허용하는 파일형식은 다음과 같습니다. jpg, jpeg,......"

와 같은 팝업창을 띄고 싶습니다.

 

그리고 제가 만든 게시판에서는

6개 파일을 선택했으면

"6 files selected."라는 문구가 출력될뿐,

이 게시판처럼 제가 선택한 파일명은 출력되지 않습니다.

 

질문을 드리다 보니

첫번째 기능은 jquery를,

두번째 기능은 jquey ajax를 이용해야 할 것 같은 느낌적인 느낌이 드네요.

 

고수님들의 핵심적인 tip을 구하고자 합니다.

답변 부탁드립니다.

 

 다음글 데이터 베이스 연결 (3)
 이전글 DB 테이블 증설에 대한 개발 고민입니다. (2)

댓글

빛그림 / 2018/06/08 16:01:39 / 추천 0
input 태그에 accept="image/*" 를... 먼저 설정하시어 이미지만 업로드 되도록 하시고, 그뒤에 2차적으로 확장자 체크를 하심이...
난만이 / 2018/06/08 16:37:05 / 추천 0

우선 답변 감사드립니다.

input태그에서 accept라는 속성을 몰랐네요.^^;

그런데 파일 한개를 선택할 때는 해당 파일명을 가지고서 확장자를 검토하여 팝업창을 띄울 수가 있는데,

여러 파일을 한번에 선택했을 경우에는 file을 업로드하는 input의 value가 "6 files selected."와 같은 형식이어서

확장자를 검토할 수가 없어 팝업창을 띄울 수 있는 방법이 없네요.

관건은 여러개의 파일을 선택했을 때 각각의 파일명을 가지고 오는 것 같은데, 해법 좀 부탁드리겠습니다.

변종원(웅파) / 2018/06/08 17:12:57 / 추천 0

다중 업로드를 어떤 방식으로 처리했는지 알 수가 없기 때문에 답변을 할 수가 없습니다.

개념만 알려드리면 ci 파일업로드 라이브러리에 확장자 제한하는 옵션이 있습니다. ci 라이브러리를 사용하셨다면 매뉴얼 참고해서 적용하시면 되고

빛그림님 말씀처럼 클라이언트와 서버 모두 체크를 하는 것이 좋습니다. 서버 체크 방식은 일단 서버에 업로드가 되고 그 이후에 체크하는 것이라

리소스 낭비입니다. 자바스크립트로 확장자 정도 먼저 체크하고 서버에서도 체크하는 형태로 하면 리소스 낭비를 줄일 수 있습니다.

그리고 로직에 관한 부분이라 게시판 이동합니다.

빛그림 / 2018/06/08 17:59:46 / 추천 0

자바스크립트에서 검사 하시길 원하시면 아래 페이지를 참고해서 작업하시면 될듯 합니다

https://itsolutionstuff.com/post/how-to-check-file-size-when-select-multiple-file-using-jqueryexample.html.

이미 단일 화일 업로드시 확장자 검증 기능을 구현하셨으면 어려움 없으리라 생각합니다.

업로드를 받아주는 과정에서도 검사를 한번 해주시는게 좋겠고요.

변종원(웅파) / 2018/06/08 18:14:27 / 추천 0
for문 안에서 몇번째 파일이 다른 포맷인지 메세지를 쌓고 그 메세지 변수를 리턴해주면 되겠네요.
난만이 / 2018/06/09 10:26:43 / 추천 0

두 분 모두 감사드립니다.

덤으로 파일 용량도 체크할 수 있게 되었네요.

그리고 구글링하다가 다중파일업로드 플러그인을 찾아 이곳에 올려 놓습니다.

http://lampspw.wallonie.be/dgo4/tinymvc/myfiles/plugins/multifile-2.2.1/docs.html