2017-12-27 752 views
1

我想用ajax上传一个文件以及其他参数。但是,这些文件没有上传。如何在codeigniter中使用ajax上传文件

表单代码

<form id="first_form" method="post" enctype="multipart/form-data"> 
    <input type="file" id="file" name="file" accept="image/*" onchange="loadFile(event)"> 
    <input type="text" data-validation="url" class="form-control" id="first_name" name="first_name" placeholder="First Name" /> 
    <input type="text" class="form-control" id="last_name" name="last_name" placeholder="Last Name" /> 
    <input type="image" src="<?php echo base_url(); ?>assets/images/icon/_Save.png" class="Save-container img-circle" id="submit_first_form"> 
</form> 

脚本代码

<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#submit_first_form").click(function(event) { 
    event.preventDefault(); 
    var file = $("input#file").val(); 
    var first_name = $("input#first_name").val(); 
    var last_name = $("input#last_name").val(); 

    jQuery.ajax({ 
     type: "POST", 
     url: "<?php echo base_url(); ?>" + "student/add_data", 
     dataType: 'json', 
     data: { 
      file: file, 
      first_name: first_name, 
      last_name: last_name 
     }, 
     success: function(res) { 
     if (res) 
      { 
       console.log(res); 
      } 
     } 
    }); }); }); 
</script> 

控制器代码

public function add_data() 
    { 
     $data = array(
      'file' => $this->input->post('file'), 
      'first_name' => $this->input->post('first_name'), 
      'last_name'=>$this->input->post('last_name') 
     ); 

     $status = ""; 
     $msg = ""; 
     $file_element_name = $data['file']; 

     $config['upload_path'] = 'www.localhost.com/project/assets/supplier'; 
     $config['allowed_types'] = 'gif|jpg|png|doc|txt'; 
     $config['max_size'] = 1024 * 8; 
     $config['encrypt_name'] = TRUE; 

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

     if (!$this->upload->do_upload($file_element_name)) 
      { 
       $status = 'error'; 
       $msg = $this->upload->display_errors('', ''); 
      } 
     else 
      { 
       $data = $this->upload->data(); 
       //$data['file_name'] 
       $status = "success"; 
       $msg = "File successfully uploaded"; 
      } 
     echo json_encode(array('status' => $status, 'msg' => $msg)); 
    } 

错误,我在控制台我得到的是:

{状态:“错误”,味精:“你没有选择要上传的文件。”}

谁能告诉如何上传文件

+1

尝试看https://stackoverflow.com/questions/34151367/codeigniter-3-ajax-file-upload-you-did-not-select -a-file-to-upload – Leo

+1

可能存在dupl [您没有选择要上传的文件。 PHP代码点火器](https://stackoverflow.com/questions/20115515/you-did-not-select-a-file-to-upload-php-code-igniter) – Vickel

+0

@Vickel尝试了解决方案,但仍然错误 – sammy

回答

3

尝试使用此代码为脚本:

<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#submit_first_form").click(function(event) { 
    event.preventDefault(); 
    var form_data = new FormData($('#first_form')[0]); 

    jQuery.ajax({ 
     type: "POST", 
     url: "<?php echo base_url(); ?>" + "student/add_data", 
     data: form_data, 
     processData: false, 
     contentType: false, 
     success: function(res) { 
     if (res) 
      { 
       console.log(res); 
      } 
     } 
    }); }); }); 
</script> 
+0

我仍然收到相同的消息,你可以请检查一下控制器的代码吗 – sammy

+0

替换$ file_element_name = $ data ['file'];用$ file_element_name = $ _FILES ['file'];希望这将解决这个问题。 –

+0

现在我得到错误作为未定义的索引:文件 – sammy

0
<form id="first_form" method="post" enctype="multipart/form-data"> 

的加密类型时,文件上传。

+0

尝试过但仍然期望的结果是没有到来 – sammy

0

- >给在形式上标签ID 提交和之前的形式密切 脚本添加一个提交按钮发送请求 $(“#拯救”)点击(函数(事件){ event.preventDefault();

// Create an FormData object 
    var data1 = new FormData($('#fileUploadForm')[0]); 
     console.log($('#fileUploadForm')); 
$.ajax({ 
     type: "POST", 
     enctype: 'multipart/form-data', 
     url: "<?php echo base_url(); ?>" + "student/add_data", 
     data: data1, 
     processData: false, 
     contentType: false, 
     cache: false, 

     success: function (data) { 
     data = JSON.parse(data); 
     console.log(data); 
     if(data.id==1) 
     { 
      localStorage.setItem("user_profile_pic", data.user_pic); 

      alert("updated sucessfully") 

     } 



     } 
    });