104 lines
3.6 KiB
HTML
104 lines
3.6 KiB
HTML
<script type="text/javascript">
|
|
var ajaxG;
|
|
function _(el) {
|
|
return document.getElementById(el);
|
|
}
|
|
|
|
function upload() {
|
|
var file = _("FILE_SUBMISSION").files[0];
|
|
const fileSize = file.size / 1024 / 1024;
|
|
const maxSize = {{MAXIMUM_STORAGE_IN_MB}} - {{USED_STORAGE_IN_MB}};
|
|
const maxFileNameLength = {{MAXIMUM_FILE_NAME_SIZE}};
|
|
const allowedFileTypeArray = "{{ALLOWED_FILE_TYPES_LIST_COMMA_SEPARATED}}".split(",");
|
|
const forbiddenFileCharArray = "{{FORBIDDEN_FILE_CHARACTER_LIST_SEP_SEPARATED}}".split("#SEP#");
|
|
var fileTypeIsValid = false;
|
|
var fileType;
|
|
var fileNameIncludesForbiddenChar = false;
|
|
|
|
allowedFileTypeArray.every(type => {
|
|
fileType = type;
|
|
if (file.name.substring(file.name.length - type.length) == type) {
|
|
fileTypeIsValid = true;
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
|
|
var filenameWithoutType = encodeURIComponent(file.name.substring(0, file.name.length - fileType.length));
|
|
|
|
forbiddenFileCharArray.every(char => {
|
|
if (filenameWithoutType.includes(char)) {
|
|
fileNameIncludesForbiddenChar = true;
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
|
|
|
|
if (fileSize > maxSize) {
|
|
alert('File size exceeds availible space by: ' + (Math.trunc((fileSize - maxSize) * 100) / 100) + ' MB');
|
|
unHide();
|
|
} else if(file.name.length > maxFileNameLength) {
|
|
alert('File name exceeds allowed length by ' + (file.name.length - maxFileNameLength) + ' characters');
|
|
unHide();
|
|
}else if(!fileTypeIsValid) {
|
|
alert('Type of the file is invalid ' + file.name);
|
|
unHide();
|
|
}else if(fileNameIncludesForbiddenChar) {
|
|
alert('The file containes a forbidden character ' + file.name);
|
|
unHide();
|
|
} else {
|
|
var formdata = new FormData();
|
|
formdata.append("FILE_SUBMISSION", file);
|
|
var ajax = new XMLHttpRequest();
|
|
ajax.upload.addEventListener("progress", progressHandler, false);
|
|
ajax.addEventListener("load", completeHandler, false);
|
|
ajax.addEventListener("error", errorHandler, false);
|
|
ajax.addEventListener("abort", abortHandler, false);
|
|
ajaxG = ajax;
|
|
ajax.open("POST", "/freelancer/submissionManagement/add/fulfillment");
|
|
ajax.send(formdata);
|
|
}
|
|
}
|
|
|
|
function progressHandler(event) {
|
|
_("loadedtotal").innerHTML = "Uploaded " + event.loaded + " bytes of " + event.total;
|
|
var percent = (event.loaded / event.total) * 100;
|
|
_("progressBar").value = Math.round(percent);
|
|
_("status").innerHTML = Math.round(percent) + "% uploaded... please wait";
|
|
}
|
|
|
|
function completeHandler(event) {
|
|
unHide();
|
|
_("status").innerHTML = event.target.responseText;
|
|
_("progressBar").value = 0;
|
|
}
|
|
|
|
function errorHandler(event) {
|
|
unHide();
|
|
_("status").innerHTML = "Upload Failed";
|
|
}
|
|
|
|
function abortHandler(event) {
|
|
unHide();
|
|
_("status").innerHTML = "Upload Aborted";
|
|
}
|
|
|
|
function hide() {
|
|
_("FILE_UPLOAD_BUTTON").style.display = 'none';
|
|
_("ABORT_FILE_UPLOAD_BUTTON").style.display = '';
|
|
|
|
}
|
|
|
|
function unHide() {
|
|
_("FILE_UPLOAD_BUTTON").style.display = '';
|
|
_("ABORT_FILE_UPLOAD_BUTTON").style.display = 'none';
|
|
|
|
}
|
|
|
|
function abort() {
|
|
ajaxG.abort();
|
|
ajaxG = null;
|
|
|
|
}
|
|
</script> |