본문 바로가기
소프트웨어 개발/PHP

[코드이그나이터4] jquery-ajax 업로드 설정, 컨트롤러 설정

by 인생은즐겁게 2022. 2. 13.
반응형

1. processData=false

processData값이 true일 때에는 파일 업로드가 안됩니다. jquery ajax는 기본값이 processData true이기 때문에 false로 변경합니다. 

 

2. contentType=false

기본값은 true이며 기본값으로는 전송이 안되기 때문에 false로 변경합니다.

    <form id="frm" name="frm" method="post" >
    <div class="row justify-content-center">
        <div class="col-8 mb-3">
            <div class="row ">

                <div class="mb-3">
                    <label for="formFile" class="form-label">파일 업로드</label>
                    <input class="form-control" type="file" id="board_file" name="board_file" >
                </div>

                <div class="col-12 mb-3">
                    <button type="button" id="btn_save" class="btn btn-primary">글작성</button>
                </div>

            </div>
        </div>
    </div>
    </form>
    
    <script>

$("#btn_save").on("click", function () {
    
    var form_data = new FormData();          
    form_data.append('board_file', $('#board_file')[0].files[0] );

    $.ajax({
        type        : "POST",            
        url         : "<?=base_url("board/save")?>", 
        dataType    : 'json', 
        cache       : false,
        contentType : false,
        processData : false,
        data        : form_data,            
        success     : function( res ){
            if( res.state == 'success' )
            {
                alert("적용 완료하였습니다.");
                location.reload();
            }
        },
        error : function(XMLHttpRequest, textStatus, errorThrown){ 
            alert("error")
        }
    });

});
</script>

 

3. 컨트롤러 선언에 File 개체 선언

컨트롤러 선언부에 use CodeIgniter\Files\File; 선언합니다.

<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\BoardModel;
use CodeIgniter\Files\File;

class Board extends BaseController
{
   

    public function __construct()
    {
          
    }
    public function index()
    {


    }

    public function save( int $ss_board_id = null )
    {

        
        //파일업로드 
        $img = $this->request->getFile('board_file');
     
        $filepath = WRITEPATH."uploads/".$img->store();
        $data = ['uploaded_flleinfo' => new File($filepath)];
        
         echo json_encode(array(
                'state'         => 'success',
                'msg'           => 'ok'
            ));
        
    }

}

getFile 메소드로 request한 정보를 받아서 $img 변수로 선언합니다. store(); 메소드로 저장할 파일명을 만들고,

File개체를 이용하여 지정된 폴더에 저장을합니다.

 

참고링크 : http://ci4doc.cikorea.net/libraries/uploaded_files.html

반응형

댓글