I'm trying to make a website that can download jpg,png,pdf,docx file those are uploaded by an admin.
uploading those content is working without problem. when uploading i insert that file name in to mysql table as well. using that table I'am showing the uploaded file names to users.
this is the code I'am using for display those files.
<?php
if (!empty($downloads)) {
foreach ($downloads as $val) {
?> <div class="col-md-3 col-sm-6 col-xs-12">
<div class="panel panel-danger">
<div class="panel-heading panel-title">
<?php echo $val['upload_description']; ?>
</div>
<div class="panel-body">
<?php echo $val['file_name']; ?>
<div class="clear-fix clear clearfix"></div>
<div id="download" onclick="downloadFile('<?php echo $val['file_name']; ?>');" class="btn btn-danger">Download</div>
</div>
</div>
</div>
<?php
}
}
?>
and this is my ajax code
function downloadFile(str) {
//alert(str);
$.ajax({
type: 'POST',
url: 'downloadfiles',
data: {value: str},
success: function(data) {
alert('ok' + data);
}
});
}
when some one click on the download button, using ajax and jquery I'am sending that file name to a download_controller. this is the function in the download_controller file
public function download_files() {
$fileName = $this->input->post('value');
$file_path = 'uploaded/' . $fileName;
$this->_push_file($file_path, $fileName);
}
function _push_file($path, $name) {
$this->load->helper('download');
// make sure it's a file before doing anything!
if (is_file($path)) {
// required for IE
if (ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off');
}
// get the file mime type using the file extension
$this->load->helper('file');
$mime = get_mime_by_extension($path);
// Build the headers to push out the file properly.
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($path)) . ' GMT');
header('Cache-Control: private', false);
header('Content-Type: ' . $mime); // Add the mime type from Code igniter.
header('Content-Disposition: attachment; filename="' . basename($name) . '"'); // Add the file name
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path)); // provide file size
header('Connection: close');
readfile($path); // push it out
exit();
}
}
but the downloading never starting. when trying to download a png file i'm getting this kind of message.
can some one tell me what is the wrong thing I'am doing here?
thank You
I found what I did wrong. thanks to Mr.KraneBird
I change my ajax code from this
$.ajax({
type: 'POST',
url: 'downloadfiles',
data: {value: str},
success: function(data) {
alert('ok' + data);
}
});
to this.
window.location.href = "<?php echo base_url().'downloadfiles/'?>" + str;
without posting it to the download_controller now i redirect to the download_controller.
now it is working well without any error.
thank you every one who waste your valuable time to help me.