CodeIgniter provides some built-in helpers to make easy to implement some useful functionality in the web application. Download Helper is one of them that lets you integrate file download feature quickly in CodeIgniter. In this CodeIgniter tutorial, we will show you how easily you can download file or image from database using Download Helper.
The Download Helper have a force_download()
function that generates server headers which force data to be downloaded to your computer. You can download existing file from the server using force_download()
function. The force_download()
function accepts 3 parameters – $filename
(string), $data
(mixed), and $set_mime
(bool). To download the existing file you’ll need to use the force_download()
function like the following.
force_download('/path/to/photo.jpg', NULL);
Here we’ll provide an example script to download files or images from database in CodeIgniter application. The following functionalities will be implemented in this script.
uploads/files/
).Create a directory where you want to store the uploaded files. The uploaded files are stored in the uploads/files
directory of the application root.
To store the files information a table is needed into MySQL database. The following SQL creates a files
table with some basic required fields.
CREATE TABLE `files` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `file_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '1', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Files controller handles the files listing and download functionality. It contains three functions __construct()
, index()
, and download()
.
__construct()
– The File model is loaded for fetching files data from the database.
index()
– The file’s data is fetched from the database using File model and passed to the view.
download()
– The requested file is downloaded based on the provided ID from the directory.
In download()
function, the file information is fetched from the database and force_download()
is used to download the respective file from the directory.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Files management class created by CodexWorld
*/
class Files extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->model('file');
}
public function index(){
$data = array();
//get files from database
$data['files'] = $this->file->getRows();
//load the view
$this->load->view('files/index', $data);
}
public function download($id){
if(!empty($id)){
//load download helper
$this->load->helper('download');
//get file info from database
$fileInfo = $this->file->getRows(array('id' => $id));
//file path
$file = 'uploads/files/'.$fileInfo['file_name'];
//download file from directory
force_download($file, NULL);
}
}
}
The File model handles all the database related works and it contains one function getRows()
. The getRows()
function get records from the files
table and returns the requested data.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class File extends CI_Model{
/*
* get rows from the files table
*/
function getRows($params = array()){
$this->db->select('*');
$this->db->from('files');
$this->db->where('status','1');
$this->db->order_by('created','desc');
if(array_key_exists('id',$params) && !empty($params['id'])){
$this->db->where('id',$params['id']);
//get records
$query = $this->db->get();
$result = ($query->num_rows() > 0)?$query->row_array():FALSE;
}else{
//set start and limit
if(array_key_exists("start",$params) && array_key_exists("limit",$params)){
$this->db->limit($params['limit'],$params['start']);
}elseif(!array_key_exists("start",$params) && array_key_exists("limit",$params)){
$this->db->limit($params['limit']);
}
//get records
$query = $this->db->get();
$result = ($query->num_rows() > 0)?$query->result_array():FALSE;
}
//return fetched data
return $result;
}
}
This view is loaded by the index()
method of the Files controller. All the files are listed with title, preview, and download link. When the user clicks on the Download link, respective file is downloaded by the download()
method of Files
controller.
<?php if(!empty($files)){ foreach($files as $frow){ ?> <div class="file-box"> <div class="box-content"> <h5><?php echo $frow['title']; ?></h5> <div class="preview"> <embed src="<?php echo base_url().'uploads/files/'.$frow['file_name']; ?>"> </div> <a href="<?php echo base_url().'files/download/'.$frow['id']; ?>" class="dwn">Download</a> </div> </div> <?php } } ?>
Files are listed from the database like the below.
Do you want to get implementation help, or enhance the functionality of this script? Click here to Submit Service Request
Can you show us, how to add download counter into codeigniter or laravel ….
Thank you
We’ll try to publish your requested tutorial soon. Please subscribe our newsletter to get notified.
Can I request the full code of your view? Thanks