I'm trying to upload a form with a file field in CodeIgniter. I successfully insert the form data without file to database. But it shows the error below when I try with the file field
`<p>You did not select a file to upload.</p>`
I tried many ways like this forum thread and this SO question, but nothing helps me.
view_add_author.php
<?php
$this->load->helper('form');
echo form_open_multipart('admin/form_actions/add_author', 'id="add_author_form"');
?>
<div class="form-group">
    <label for="author_image">Image</label>
    <input type="file" name="author_image" id="author_image">
    <p class="help-block">Format(jpg, jpeg, gif, png)</p>
</div>
custom.js
function add_author(data){
    return $.ajax({
        url: url+'admin/form_actions/add_author',
        type: 'POST',
        async: false,
        dataType: 'json',
        mimeType:"multipart/form-data",
        data: data
    });
}
$('#add_author_form').submit(function(e){
    e.preventDefault();
    var data = $('#add_author_form').serialize();
    add_author(data).done(function(data){
        if(data.msg != '')
        {
            $('#add_author_form')[0].reset();
            alert(data.msg);
        }
        else if(data.error != '')
        {
            alert(data.error);
        }
    });
});
form_actions.php
public function add_author ()
{
    $this -> load -> helper ( 'form' );
    $config = array (
        'upload_path' => './images/author/',
        'allowed_types' => 'gif|jpg|jpeg|png',
        'max_size' => '2000',
        'max_width' => '2000',
        'max_height' => '2000',
        'encrypt_name' => true,
    );
    $this -> load -> library ( 'upload', $config );
    if ( ! $this -> upload -> do_upload ( 'author_image' ) )
    {
        echo $error = $this -> upload -> display_errors ();
    }
    else
    {
        echo $data = $this -> upload -> data ();
    }
}
 
     
     
     
    