2017-06-06 187 views
3

我試過很多例子。這一個成功,但有時它沒有上傳。這是我的代碼:用CodeIgniter AJAX上傳文件

<div class="fallback"> 
    <form method="POST" id="quiz_file" action="<?php echo site_url('home/upload_quiz/' . $kelas);?>" enctype="multipart/form-data"> 
     <input name="filequiz" id="filequiz" type="file" /> 
    </form> 
</div> 

這是Ajax代碼:

$('#submitquiz').on('click', function(event) { 
       var inputFile = $('input[name=filequiz]'); 
       var uploadURI = $('#quiz_file').attr('action'); 
       document.getElementById('submitquiz').disabled = true; 
       var fileToUpload = inputFile[0].files[0]; 
       // make sure there is file to upload 
       if (fileToUpload != 'undefined') 
       { 
        // provide the form data 
        // that would be sent to sever through ajax 
        var formData = new FormData(); 
        formData.append("file", fileToUpload); 
        console.log("Process"); 
        // now upload the file using $.ajax 
        $.ajax({ 
         url: uploadURI, 
         type: 'post', 
         data: formData, 
         processData: false, 
         contentType: false, 
         beforeSend: function (xhr) { 
          console.log("progress"); 
          console.log(xhr); 
          console.log(formData); 
         }, 
         success: function(data) 
         { 
          console.log("finish"); 
          console.log(data); 
         } 

這是我的控制器:

function upload_quiz($kelas) 
    { 
     $temp = explode(".", $_FILES["filequiz"]["name"]); 
     $extension = end($temp); 
     $new_name = time() . "." . $extension; 
     $config['upload_path']   = './assets/images/quiz_images/'; 
     $config['allowed_types']  = 'gif|jpg|png|jpeg'; 
     $config['max_size']    = 2000; 
     $config['file_name']   = $new_name; 
     $config['max_width']   = 1024; 
     $config['max_height']   = 768; 
     $this->load->library('upload', $config); 

     $session_data = $this->session->userdata('logged_in'); 
     $data['user_name'] = $session_data['user_name']; 
     $data['kelas'] = $kelas; 
     if (! $this->upload->do_upload('filequiz')) 
     { 
      $data['error'] = array('error' => $this->upload->display_errors()); 
      $this->load->view('course', $data); 
     } 
     else 
     { 
      $data['status'] = array('upload_data' => $this->upload->data()); 
      $quiz_name = $this->input->post('quiz_name'); 
      $this->load->model('Model'); 
      if($this->Model->input_quiz($quiz_name,$new_name,$kelas) == TRUE) 
      { 
       $this->load->view('course', $data); 
      } 
      elseif($this->Model->input_quiz($quiz_name,$new_name,$kelas) == FALSE) 
      { 
       $this->load->view('course', $data); 
      } 
     } 
    } 

我提出使用控制檯即時通訊時使用按鈕,Ajax響應後.LOG(數據)。它說我的控制器函數($ temp)中的第一行是UNDIFEND INDEX:filequiz。

我可能會錯過什麼?

+0

,這意味着沒有被通過,試圖在什麼正在傳遞數據的瀏覽器檢查和名字太 – Exprator

+0

看起來像文件'formdata'對象發送'file'而不是'filequiz' – RamRaider

+0

你可以試試'$ _FILES [「file」] [「tmp_name」]'? –

回答

1

更改此

$temp = explode(".", $_FILES["filequiz"]["name"]); 

如下

$temp = explode(".", $_FILES["file"]["name"]); 

if (! $this->upload->do_upload('filequiz'))if (! $this->upload->do_upload('file'))

你的JS,如果你發送的文件名作爲filefilequiz

然而要使用名稱filequiz然後更改Ajax代碼從

formData.append("file", fileToUpload); 

formData.append("filequiz", fileToUpload);