File upload is the most used feature in the web application where the files are managed dynamically. The file can be easily uploaded to the server using PHP. Also, you can upload multiple files at a time using PHP. For the CodeIgniter web application, you can use the system library to implement file upload functionality. CodeIgniter Upload library helps you to upload files to the server in CodeIgniter.
CodeIgniter’s File Uploading Class allows files to be uploaded to the server. You can upload files or images easily using the Upload library in CodeIgniter. Not only a single file, but also the multiple files can be uploaded with CodeIgniter Upload library. In this tutorial, we will show you how to upload multiple files and images at once using CodeIgniter’s Upload Library.
In the example code, the following functionality will be implemented to upload multiple files in CodeIgniter.
How to Upload File in CodeIgniter
To store the file name and related information, a table is required in the database. The following SQL creates a files
table with basic fields in the MySQL database.
CREATE TABLE `files` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`file_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`uploaded_on` datetime NOT NULL,
`status` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '1' COMMENT '1=Active, 0=Inactive',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Create a directory on the server where you want to store the uploaded files. For example, create a uploads/files/
directory in the root folder of the CodeIgniter application.
The Upload_Files controller handles the multiple files upload and image display functionality.
insert()
method of the File model.getRows()
method of the File model.<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Upload_Files extends CI_Controller {
function __construct() {
parent::__construct();
// Load file model
$this->load->model('file');
}
function index(){
$data = array();
$errorUploadType = $statusMsg = '';
// If file upload form submitted
if($this->input->post('fileSubmit')){
// If files are selected to upload
if(!empty($_FILES['files']['name']) && count(array_filter($_FILES['files']['name'])) > 0){
$filesCount = count($_FILES['files']['name']);
for($i = 0; $i < $filesCount; $i++){
$_FILES['file']['name'] = $_FILES['files']['name'][$i];
$_FILES['file']['type'] = $_FILES['files']['type'][$i];
$_FILES['file']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
$_FILES['file']['error'] = $_FILES['files']['error'][$i];
$_FILES['file']['size'] = $_FILES['files']['size'][$i];
// File upload configuration
$uploadPath = 'uploads/files/';
$config['upload_path'] = $uploadPath;
$config['allowed_types'] = 'jpg|jpeg|png|gif';
//$config['max_size'] = '100';
//$config['max_width'] = '1024';
//$config['max_height'] = '768';
// Load and initialize upload library
$this->load->library('upload', $config);
$this->upload->initialize($config);
// Upload file to server
if($this->upload->do_upload('file')){
// Uploaded file data
$fileData = $this->upload->data();
$uploadData[$i]['file_name'] = $fileData['file_name'];
$uploadData[$i]['uploaded_on'] = date("Y-m-d H:i:s");
}else{
$errorUploadType .= $_FILES['file']['name'].' | ';
}
}
$errorUploadType = !empty($errorUploadType)?'<br/>File Type Error: '.trim($errorUploadType, ' | '):'';
if(!empty($uploadData)){
// Insert files data into the database
$insert = $this->file->insert($uploadData);
// Upload status message
$statusMsg = $insert?'Files uploaded successfully!'.$errorUploadType:'Some problem occurred, please try again.';
}else{
$statusMsg = "Sorry, there was an error uploading your file.".$errorUploadType;
}
}else{
$statusMsg = 'Please select image files to upload.';
}
}
// Get files data from the database
$data['files'] = $this->file->getRows();
// Pass the files data to view
$data['statusMsg'] = $statusMsg;
$this->load->view('upload_files/index', $data);
}
}
The File model handles the database related operations (fetch and insert).
insert_batch()
function of CodeIgniter Query Builder Class.<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class File extends CI_Model{
function __construct() {
$this->tableName = 'files';
}
/*
* Fetch files data from the database
* @param id returns a single record if specified, otherwise all records
*/
public function getRows($id = ''){
$this->db->select('id,file_name,uploaded_on');
$this->db->from('files');
if($id){
$this->db->where('id',$id);
$query = $this->db->get();
$result = $query->row_array();
}else{
$this->db->order_by('uploaded_on','desc');
$query = $this->db->get();
$result = $query->result_array();
}
return !empty($result)?$result:false;
}
/*
* Insert file data into the database
* @param array the data for inserting into the table
*/
public function insert($data = array()){
$insert = $this->db->insert_batch('files',$data);
return $insert?true:false;
}
}
Initially, an HTML form is displayed with file input to select multiple files.
index()
function of the Upload_Files controller for uploading multiple images to the server.<!-- Display status message -->
<?php echo !empty($statusMsg)?'<p class="status-msg">'.$statusMsg.'</p>':''; ?>
<!-- File upload form -->
<form method="post" action="" enctype="multipart/form-data">
<div class="form-group">
<label>Choose Files</label>
<input type="file" class="form-control" name="files[]" multiple/>
</div>
<div class="form-group">
<input class="form-control" type="submit" name="fileSubmit" value="UPLOAD"/>
</div>
</form>
Under the file upload form,
<!-- Display uploaded images -->
<div class="row">
<h3>Uploaded Files/Images</h3>
<ul class="gallery">
<?php if(!empty($files)){ foreach($files as $file){ ?>
<li class="item">
<img src="<?php echo base_url('uploads/files/'.$file['file_name']); ?>" >
<p>Uploaded On <?php echo date("j M Y",strtotime($file['uploaded_on'])); ?></p>
</li>
<?php } }else{ ?>
<p>File(s) not found...</p>
<?php } ?>
</ul>
</div>
In the example, some basic preferences are used to Upload library configuration ($config
). But you can specify various preferences provided by the Upload Class in CodeIgniter.
Multiple Image Upload with View, Edit and Delete in CodeIgniter
Do you want to get implementation help, or enhance the functionality of this script? Click here to Submit Service Request
hello how to upload multiple video in same id
thanks
thanks
Hi,
great work, i want to make file name appears in the bottom of date. how do i do that?
thanks
great work
Hi, this works for Doc and PDF files?
Thanks a lot.
Yes, any types of file can be uploaded. Specify the file types in allowed_types config.
thank you so much its works
thank you
how to select image from the database using codeigniter…….any one help me
which version of CI is used
This script developed and tested with CodeIgniter 3.x. But this script will work in the both version of CodeIgniter 2.x and 3.x.
Great post. Works perfectly fine!
this was a great help. Thank you so much
now it working fine
thank you.
hello sir
i use this code but only one file can store in database as well as in path.
when i print $_FILES[‘picture’][‘name’] = $_FILES[‘picture’][‘name’][$i]; it return only one file name instead of all.
Thank you so much admin. This post helps me a lot 🙂
hey i got solution i was make mistake in routes now its working fine thanks alot