Jump to content

CodeIgniter Ajax File Upload Problem


mostafatalebi

Recommended Posts

Hello

I have written a mechanism to upload a file using AJAX technology (pure javascript) in CodeIgniter.

Explanation:

1- I have written an scrip.js file which is responsible to handle AJAX/Javascript process of the upload.

2- I have written a controller in CodeIgniter which receives request from AJAX to upload the file.

3- I have written a simple HTML page

 

PROBLEM: When I hit the upload button, simply nothing happens! No error is shown.

 

Here are files:

 

This is JAVASCRIPT

// JavaScript Document
var doUpload =  function(event){
        // globally used variables in this function
        var progressBar = document.getElementById('progressBar');
        
        event.preventDefault(); // prevents the default action of an element
        event.stopPropagation();        
        // get the file-input id
        var fileId = document.getElementById('file');    
        
        // this variable makes an object which accept key/value pairs which could be sent via ajax.send
        var formObj = new FormData();
        
        // append currently selected file to the dataObject            
        formObj.append('file', fileId.files[0]);        
        
    
        // this is a variable to check in the php script (controller if the codeIgniter is used)
        formObj.append('error-check', true);
        formObj.append('finish-check', true);
                    
        // let's make the ajax request object
        var ajaxReq = new XMLHttpRequest();
                                                
        // PROGRESS  OF THE FILE /////////////////////////////////////////////
            // now trigger a function during the progress-process of the file-upload process
        
        ajaxReq.upload.addEventListener('progress', function(event){        
                
                console.log('this is a very good.');        
                
                // first let's get the amount of the file loaded. it is in decimals
                var percent = event.loaded / event.total;
                // get the name of the element that the progress-indicator is outputted there
                
                if(event.lengthComputable) // if a file is inserted and everything is just OK for uploading
                {
                    if(progressBar.hasChildNodes()) // cleans the div container for a new progress to display
                    {
                        progressBar.removeChild(progressBar.firsChild);
                    }
                    progressBar.appendChild(document.createTextNode('The Progress So Far: '+percent*100+' %'));
                }
        // END OF PROGRESS  OF THE FILE /////////////////////////////////////////////
        
        
        
        // LOAD  OF THE FILE /////////////////////////////////////////////
            ajaxReq.upload.addEventListener('load', function(event){
                progressBar.appendChild(document.createTextNode(" Completed!"));
            });
        // END OF LOAD  OF THE FILE /////////////////////////////////////////////
        
        // ERROR  OF THE FILE /////////////////////////////////////////////
            ajaxReq.upload.addEventListener('error', function(event){
                progressBar.removeChild();
                progressBar.appendChild(document.createTextNode("Failed to Upload the File."));
            });    
        // END OF THE ERROR  OF THE FILE /////////////////////////////////////////////
        
        // JSON            
        
        // OPEN THE AJAX REQUEST
        ajaxReq.open('POST', 'upload/uploader');
        
        // Set the header of the POST request
        ajaxReq.setRequestHeader('Cache-Control', 'no-cache');
        
        // send the file. remember, we shoud pass a formData object as an argument to the ajaxRequest.send();
        ajaxReq.send(formObj);
        
        });
        
}

window.addEventListener('load', function(event)
{    
        // get the submit id of the form
        var submitButton = document.getElementById('submit');
        submitButton.addEventListener('click', doUpload);
});

This is PHP Controller in CodeIgniter

<?php
class Upload extends CI_Controller
{
         function index()
        {
            $this->load->view('pages/form');
         }
         function uploader ()
         {
                // define the required settings for the upload library to instanciate
                $config['upload_path'] = './uploads/';
                $config['allowed_types'] = 'gif|jpg|png|doc|txt';
                $config['max_size']  = 1024 * 8;
                $config['encrypt_name'] = TRUE;
                
                
                // load the upload library
                $this->load->library('upload', $config);
                
                
                if(!$this->upload->do_upload('file'))
                {
                    $data['error'] = $this->upload->display_errors();
                    //$this->load->view('pages/form', $data);
                    json_encode($data['error']);
                }
                else
                {
                    $data['uploaded'] = $this->upload->data();
                    //$this->load->view('pages/form', $data);    
                }
                
                
         }
        
}

This is the HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Upload Form With Ajax</title>
<script src="<?php echo base_url(); ?>js/script.js" type='text/javascript'></script>
</head>

<body>
<div id='error' style='color: red;height: 40px; width: 200px;'>
<?php
if(!empty($error)){echo $error; }
?>
</div>
<form id='form' name='form' enctype="multipart/form-data" >
<input type='file' name='file' id='file'/>
<input type='submit' name='submit' id='submit' value='Upload File' />
</form>
<div style='height: 200px; width: 300px; color: red; padding: 10px; background-color: #CCC;' id='progressBar'></div>
</body>
</html>
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.