Is it possible to upload a text file to input in HTML/JS?

前端 未结 2 2004
栀梦
栀梦 2021-02-04 19:06

I have some input boxes in a HTML form that need to be updated when the form loads and these values need to be uploaded from a text file.
A similar question was also asked h

相关标签:
2条回答
  • 2021-02-04 19:12

    If you wish to go the client side route, you'll be interested in the HTML5 FileReader API. Unfortunately, there is not wide browser support for this, so you may want to consider who will be using the functionality. Works in latest Chrome and Firefox, I think.

    Here's a practical example: http://www.html5rocks.com/en/tutorials/file/dndfiles/#toc-reading-files

    And I also read here to find the readAsText method: http://www.w3.org/TR/file-upload/#dfn-readAsText

    I would do something like this (jQuery for brevity): http://jsfiddle.net/AjaDT/2/

    Javascript

    var fileInput = $('#files');
    var uploadButton = $('#upload');
    
    uploadButton.on('click', function() {
        if (!window.FileReader) {
            alert('Your browser is not supported');
            return false;
        }
        var input = fileInput.get(0);
    
        // Create a reader object
        var reader = new FileReader();
        if (input.files.length) {
            var textFile = input.files[0];
            // Read the file
            reader.readAsText(textFile);
            // When it's loaded, process it
            $(reader).on('load', processFile);
        } else {
            alert('Please upload a file before continuing')
        } 
    });
    
    function processFile(e) {
        var file = e.target.result,
            results;
        if (file && file.length) {
            results = file.split("\n");
            $('#name').val(results[0]);
            $('#age').val(results[1]);
        }
    }
    

    Text file

    Jon
    25
    
    0 讨论(0)
  • 2021-02-04 19:23

    The other answer is great, but a bit outdated and it requires HTML & jQuery to run.

    Here is how I do it, works in all modern browsers down to IE11.

    /**
     * Creates a file upload dialog and returns text in promise
     * @returns {Promise<any>}
     */
    function uploadText() {
        return new Promise((resolve) => {
            // create file input
            const uploader = document.createElement('input')
            uploader.type = 'file'
            uploader.style.display = 'none'
    
            // listen for files
            uploader.addEventListener('change', () => {
                const files = uploader.files
    
                if (files.length) {
                    const reader = new FileReader()
                    reader.addEventListener('load', () => {
                        uploader.parentNode.removeChild(uploader)
                        resolve(reader.result)
                    })
                    reader.readAsText(files[0])
                }
            })
    
            // trigger input
            document.body.appendChild(uploader)
            uploader.click()
        })
    }
    
    // usage example
    uploadText().then(text => {
         console.log(text)
    })
    // async usage example
    const text = await uploadText()
    
    0 讨论(0)
提交回复
热议问题