how to restrict double extension while uploading file to server

2.2k Views Asked by At
fileName = inputParam.file_name.split('.')[0].toLowerCase().replace(/ /g, '') + '' +       Date.now() + "." + (fileData.file.name.split('.')[1] || inputParam.file_name.split('.')[1])
   
filePath = filePath + fileName

This is the condition I am using.

For example it should only restrict a.jpeg.jpg or a.php.jpeg. and allow extension like a.a.jpeg or bird.tree.jpeg

2

There are 2 best solutions below

2
On

var _validFilejpeg = [".jpeg", ".jpg", ".bmp", ".png",".pdf", ".txt"];
var invalid = [".php",".php5", ".pht", ".phtml", ".shtml", ".asa", ".cer", ".asax", ".swf",".xap"];
    function validateForSize(oInput, minSize, maxSizejpeg) {
        //if there is a need of specifying any other type, just add that particular type in var  _validFilejpeg
        if (oInput.type == "file") {
            var sFileName = oInput.value;
            var file = sFileName.match(/\d/g);
            var fileExt = sFileName.substr(sFileName.length-4);
            if (sFileName.length > 0) {
                var blnValid = false;
                for (var j = 0; j < _validFilejpeg.length; j++) {
                    var sCurExtension = _validFilejpeg[j];
                    if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length)
                        .toLowerCase() == sCurExtension.toLowerCase()) {
                        blnValid = true;
                        break;
                    }
                }
                if(fileExt = 'invalid'){
     alert("Your document does not have a proper file extension.")

      blnValid = false;
} 
  if(fileExt = 'file'){
     alert("Your document does not have a proper file extension.")

      blnValid = false;
} 

               if (!blnValid) {
                    alert("Sorry, this file is invalid, allowed extension is: " + _validFilejpeg.join(", "));
                    oInput.value = "";
                    return false;
                }
            }
        }

        fileSizeValidatejpeg(oInput, minSize, maxSizejpeg);
    }

    function fileSizeValidatejpeg(fdata, minSize, maxSizejpeg) {
        if (fdata.files && fdata.files[0]) {
            var fsize = fdata.files[0].size /1024; //The files property of an input element returns a FileList. fdata is an input element,fdata.files[0] returns a File object at the index 0.
            //alert(fsize)
            if (fsize > maxSizejpeg || fsize < minSize) {
                alert('This file size is: ' + fsize.toFixed(2) +
                    "KB. Files should be in " + (minSize) + " to " + (maxSizejpeg) + " KB ");
                fdata.value = ""; //so that the file name is not displayed on the side of the choose file button
                return false;
            } else {
                console.log("");
            }
        }
    }
<input type="file"  onchange="validateForSize(this,20,5000);" >

0
On

You can simply do this

if (fileName.split('.').length > 2) {
    throw new Error('Double extension file detected')
}