Page 1 of 1
File Upload with Progress Bar
Posted: 12 Nov 2014, 05:45
by Marius
Hi,
How to upload a file and display a progress bar, percentages "%" of the upload progress, without refreshing the page? I think it is something with Ajax.
And, is it possible to check the file type before submitting for upload?
Thank you.
File Upload with Progress Bar
Posted: 12 Nov 2014, 06:41
by MarPlo
Hi
Try this script. It uses jQuery and form plugin; also, it checks the file type before upload.
To auto submit the file, without to click the submit button, replace
$('#'+ idf).ajaxForm with:
$('#'+ idf).ajaxSubmit .
html file:
Code: Select all
<form action="upload.php" id="fupl" method="post" enctype="multipart/form-data">
<input type="file" name="fileup" id="fileup" /><br/>
<input type="submit" value="Send" />
</form>
<div class="progress">
<div class="bar"></div>
<div class="percent"></div>
</div>
<div id="status"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<script>
// Upload file with status bar percentage ( https://coursesweb.net/ )
// extensions of the allowed files to upload, separated by "|"
var allowed_files = 'gif|jpg|jpe|jpeg|mp3|png';
// to submit the form with ajax from jquery.form.js plugin
// receives the form id
function ajaxFrm(idf) {
var bar = $('.bar');
var percent = $('.percent');
var status = $('#status');
// sends the form data
// use ajaxSubmit to auto submit the form
$('#'+ idf).ajaxForm({
beforeSend: function() {
status.empty();
var percentVal = '0%';
bar.width(percentVal)
percent.html(percentVal);
},
uploadProgress: function(event, position, total, percentComplete) {
var percentVal = percentComplete + '%';
bar.width(percentVal)
percent.html(percentVal);
},
complete: function(xhr) {
bar.width("100%");
percent.html("100%");
status.html(xhr.responseText);
}
});
return false;
}
// register "change" event on the input field for upload-file
document.getElementById('fileup').addEventListener('change', function(e){
var getval = e.target.value;
// check file extension
if(getval.match(new RegExp(allowed_files, 'i')) == null) alert('This type of file is not allowed for upload');
else ajaxFrm('fupl');
});
</script>
upload.php :
Code: Select all
<?php
// Simple PHP Upload Script: https://coursesweb.net/php-mysql/
$uploadpath = 'files/'; // directory to store the uploaded files (relative to this file)
$max_size = 2000; // maximum file size, in KiloBytes
$alwidth = 900; // maximum allowed width, in pixels
$alheight = 800; // maximum allowed height, in pixels
$allowtype = array('bmp', 'gif', 'jpg', 'jpe', 'mp3', 'png'); // allowed extensions
if(isset($_FILES['fileup']) && strlen($_FILES['fileup']['name']) > 1) {
$uploadpath = $uploadpath . basename( $_FILES['fileup']['name']); // gets the file name
$sepext = explode('.', strtolower($_FILES['fileup']['name']));
$type = end($sepext); // gets extension
list($width, $height) = getimagesize($_FILES['fileup']['tmp_name']); // gets image width and height
$err = ''; // to store the errors
// Checks if the file has allowed type, size, width and height (for images)
if(!in_array($type, $allowtype)) $err .= 'The file: <b>'. $_FILES['fileup']['name']. '</b> not has the allowed extension type.';
if($_FILES['fileup']['size'] > $max_size*1000) $err .= '<br/>Maximum file size must be: '. $max_size. ' KB.';
if(isset($width) && isset($height) && ($width >= $alwidth || $height >= $alheight)) $err .= '<br/>The maximum Width x Height must be: '. $alwidth. ' x '. $alheight;
// If no errors, upload the image, else, output the errors
if($err == '') {
if(move_uploaded_file($_FILES['fileup']['tmp_name'], $uploadpath)) {
echo 'File: <b>'. basename( $_FILES['fileup']['name']). '</b> successfully uploaded:';
echo '<br/>File type: <b>'. $_FILES['fileup']['type'] .'</b>';
echo '<br />Size: <b>'. number_format($_FILES['fileup']['size']/1024, 3, '.', '') .'</b> KB';
if(isset($width) && isset($height)) echo '<br/>Image Width x Height: '. $width. ' x '. $height;
echo '<br/><br/>Image address: <b>http://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['REQUEST_URI']), '\\/').'/'.$uploadpath.'</b>';
}
else echo '<b>Unable to upload the file.</b>';
}
else echo $err;
}