티스토리 뷰

php

php ajax 이미지 업로드

그래그래그래놀라 2020. 2. 7. 18:21

1. entype을 multipart/form-data로 지정해줘야 $_FILE로 받을수있다

upload.php (html 파일)


<form
enctype='multipart/form-data' method='post'>

          <label for="fileUpload" class="form-label">첨부파일</label>
          <div id="fileUpload">
                   <div class="file0">
                              <div type="button" class="btn btn-default btn-file col-sm-2">파일선택</div>

                              <input type="hidden" name="file_unlink[]">

                              <input class="form-control-file" type="file" id="file_0" name="file_0" data-type="file">
                    </div>

           </div>
</form>

 

 

 

 


2. 업로드 커스텀

$(".btn-file").click(function () {
     var $input_file = $(this).parent().children('input');
     $input_file.click();
});

 

 

 

 

 


3.가져온 파일을 처리해주기

upload_create.php

 

$(function(){

 
      var data = new FormData();  // file형식으로 넘길 data변수생성 
      var form_data = $("form").serializeArray(); // form내부 모든값 object로 받아오기

 

      // 배열로 뽑혀진 form_data를 k(0,1,2,3,4) 와v({name:"id",value"value"})로 나눠준다

      $.each(form_data, function (k, v) { 

                     // data에 배열값으로 나온form_data의 v의 name value를 data에 추가시켜준다 

                     data.append(v.name, v.value);


      });

 

     for (var i = 0; i < file.length; i++) {

 

          // 서버에 업로드된 파일을 Formdata로 생성된 data에 진짜파일을 넣어준다 
         data.append('file_' + i, $('[data-type="file"]')[i].files[0])
     
     }

 

     //ajax시작

     $.ajax({
                 type: 'post',
                 url: '../upload_create.php',
                 data: data,
                 contentType: false,   // 파일전송시 해당부분이 없으면 파일이 안넘어간다
                 processData: false,   // 파일전송시 해당부분이 없으면 파일이 안넘어간다
                 success: function (data) {
                                  alert('업로드성공');
                  },
                  error: function () {
                                  alert('오류');
                  }
    });

})

 

 

----

upload_create.php

 

 

include "db_conn.php"; // 디비연결후

 

foreach ($_FILES as $key => $value) {      
              $path = "/upload/";  //저장될 폴더명
              $upload_dir = $_SERVER["DOCUMENT_ROOT"] . $path; //저장될 경로

              if (!is_dir($upload_dir)) {
                            mkdir($upload_dir, 0707, true); //폴더가없으면 만들고
                            chmod($upload_dir, 0777);        //만들었으면 권한변경
              }

              $file_name = strtolower(end(explode('/', $_FILES[$key]['name']))); // 파일명 추출
              $file_ext = strtolower(substr(strrchr($file_name, "."), 1)); // 파일 확장자
              $file_size = $_FILES[$key]['size']; // 파일 사이즈는 파일크기 제한할때만 사용
              $new_file_name = '';


              do {

                       //파일명이 겹치면 안되니 변경시켜주고

                       $new_file_name = str_replace(" ", "", str_replace('.', '', microtime())) . "." . $file_ext;    

 

                       //같은 파일명이 없으면 통과 파일명이 겹치면 윗줄코드 재실행 

                       if (!file_exists($upload_dir . "/" . $new_file_name)) {  
                       break;
                   }
              } while (1);


              $uploadfile = $upload_dir . "/" . basename($new_file_name);  //파일업로드될경로와 파일명조합

 

              //제일 중요한 함수 ,tmp에 저장된 파일을 서버에저장

              if (move_uploaded_file($_FILES[$key]['tmp_name'], $uploadfile)) { 
                            $query_img .= "$key='$path" . "$new_file_name' ,";  //디비쿼리
                            $query_img .= "$key" . '_org' . " ='$file_name' ,";       //디비쿼리
              }
}

 

 

//디비에 저장

$query_file = " insert upload_file set ";
$query_file .= $query_img;
$query_file .= " created_at=now()"
mysql_query($query_file, $db_conn);

 

-----끝

 

move_uploaded_file( 서버에 등록된 파일 , 실서버에 옮길(업로드할) 파일경로);

 

 

 

수정,삭제할땐 서버가 터지지않게 unlink('파일경로');  를 이용하여 이전파일을 삭제해주자

 

$file_unlink = $_POST['file_unlink'];

 

$i = explode('_', $key);
unlink($_SERVER['DOCUMENT_ROOT'] . $file_unlink[$i[1]]);

 

'php' 카테고리의 다른 글

php 파일 다운로드  (0) 2020.02.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함