In this post, we will discuss how to upload a file using AJAX in Codeigniter 3. This method allows us to upload files without refreshing the page, providing a seamless user experience.
Step 1: Setting Up Codeigniter
First, download and install Codeigniter 3 from the official website. Once installed, configure your base URL and database settings in the application/config directory.
Step 2: Creating the Controller
Create a new controller named File_upload.php in the application/controllers directory. This controller will handle the file upload process.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
ini_set('erro_reporting', 0);
#[AllowDynamicProperties]
class File_upload extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->helper(array('form', 'url'));
}
public function index() {
$data = [];
$data ['content_title'] = 'File Upload';
$this->load->view('file_upload/upload', $data);
}
function upload_config($path) {
if (!is_dir($path))
mkdir($path, 0777, TRUE);
$config['upload_path'] = './'.$path;
$config['allowed_types'] = '*';
$config['max_filename'] = '255';
$config['encrypt_name'] = TRUE;
$config['max_size'] = 4096;
$this->load->library('upload', $config);
}
function showSuccessMessage($message) {
return '<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<strong>Great!</strong>
'.$message.'
</div>';
}
function showErrorMessage($message) {
return '<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<strong>Oh snap!</strong>
'.$message.'
</div>';
}
}
Step 3: Creating the View
Next, create a new view named upload.php in the application/views/file_upload directory. This view will contain the HTML form for file upload.
<!DOCTYPE html>
<html lang="en">
<head>
<title><?php echo $content_title; ?></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container mt-5">
<h2>Upload a File with AJAX Using Codeigniter 3</h2>
<div class="result"></div>
<form id="form-upload-file" method="post" autocomplete="off" enctype="multipart/form-data">
<div class="form-group">
<label>Attachment</label>
<input type="file" class="form-control" name="file" id="attachment" placeholder="Attachment">
</div>
<div class="form-group">
<button type="submit" id="btn-upload" class="btn btn-primary">Upload</button>
</div>
<div class="form-group file-result">
</div>
</form>
</div>
<script>
$(document).ready(function() {
$("body").on("submit", "#form-upload-file", function(e) {
e.preventDefault();
var data = new FormData(this);
$("#btn-upload").prop('disabled', true);
$.ajax({
type : 'POST',
url : '<?php echo base_url("file/upload"); ?>',
data : data,
dataType : 'json',
contentType : false,
cache : false,
processData :false,
beforeSend : function() {
$("#btn-upload").prop('disabled', true);
},
success : function(result) {
if($.isEmptyObject(result.error_message)) {
$(".result").html(result.success_message);
$(".file-result").html(result.html);
} else {
$(".result").html(result.error_message);
}
$("#btn-upload").prop('disabled', false);
}
});
})
});
</script>
</body>
</html>
Step 4: Handling the AJAX Request
Finally, we need to handle the AJAX request in the do_upload function of our File_upload.php. This function will process the uploaded file.
public function upload() {
$path = 'documents/';
$this->upload_config($path);
if (!$this->upload->do_upload('file')) {
$json = [
'error_message' => $this->showErrorMessage($this->upload->display_errors()),
];
} else {
$file_data = $this->upload->data();
$file_name = $path.$file_data['file_name'];
$json = [
'success_message' => $this->showSuccessMessage('File has been uploaded successfully.'),
'html' => '<a href="'.base_url($file_name).'" target="_blank">See Your file</a>',
];
}
echo json_encode($json);
}
Step 5: Define Routes
$route['file/upload/example'] = 'File_upload/index';
$route['file/upload'] = 'File_upload/upload';


