Search code examples
javascripthtmlformsfile-uploadinput

javascript - get the filename and extension from input type=file


I have a file upload input and when I click the browse button and select the file, I want the filename and extension to appear in two input text boxes (see code sample).

It works correctly with the extension, but the filename also shows the path which gives me the fakepath warning.

I understand why, but what's a good way to do this and just get the filename into that box. I don't need the path.

function getoutput(){
    outputfile.value=inputfile.value.split('.')[0];
    extension.value=inputfile.value.split('.')[1];}
    <input id='inputfile' type='file' name='inputfile' onChange='getoutput()'><br>
    Output Filename <input id='outputfile' type='text' name='outputfile'><br>
    Extension <input id='extension' type='text' name='extension'>


Solution

  • Use lastIndexOf to get the last \ as an index and use substr to get the remaining string starting from the last index of \

    function getFile(filePath) {
            return filePath.substr(filePath.lastIndexOf('\\') + 1).split('.')[0];
        }
    
        function getoutput() {
            outputfile.value = getFile(inputfile.value);
            extension.value = inputfile.value.split('.')[1];
        }
    <input id='inputfile' type='file' name='inputfile' onChange='getoutput()'><br>
        Output Filename <input id='outputfile' type='text' name='outputfile'><br>
        Extension <input id='extension' type='text' name='extension'>

    UPDATE

    function getFileNameWithExt(event) {
    
      if (!event || !event.target || !event.target.files || event.target.files.length === 0) {
        return;
      }
    
      const name = event.target.files[0].name;
      const lastDot = name.lastIndexOf('.');
    
      const fileName = name.substring(0, lastDot);
      const ext = name.substring(lastDot + 1);
    
      outputfile.value = fileName;
      extension.value = ext;
      
    }
    <input id='inputfile' type='file' name='inputfile' onChange='getFileNameWithExt(event)'><br>
      Output Filename <input id='outputfile' type='text' name='outputfile'><br>
      Extension <input id='extension' type='text' name='extension'>