javascripthtmlfileapi

parameter is not of type 'Blob'


I have written the code below to display the text from a local file using the file API but when I click the button, nothing happens. I get the following error when I inspect the element in the browser. What am I doing wrong?

Uncaught TypeError: Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'.

<!DOCTYPE html>
    <html>
    <body>

    <p>This example uses the addEventListener() method to attach a click event to a button.</p>

    <button id="myBtn">Try it</button>
    <pre id="file"></pre>

    <script>
    document.getElementById("myBtn").addEventListener("click", function(){
       var file = "test.txt"
       var reader = new FileReader();

       document.getElementById('file').innerText = reader.result;
   
       reader.readAsText(file);

    });
    </script>

    </body>
    </html>


Solution

  • To save the File content in innerHtml, you must first read the file. loadend event fires only when file is fully read, and you can access its content without errors:

    var reader = new FileReader();
    var fileToRead = document.querySelector('input').files[0];
    
    // attach event, that will be fired, when read is end
    reader.addEventListener("loadend", function() {
       // reader.result contains the contents of blob as a typed array
       // we insert content of file in DOM here
       document.getElementById('file').innerText = reader.result;
    });
    
    // start reading a loaded file
    reader.readAsText(fileToRead);
    

    You can read more here - and here