JavaScript file upload size validation

后端 未结 13 2355
眼角桃花
眼角桃花 2020-11-22 00:23

Is there any way to check file size before uploading it using JavaScript?

13条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-22 01:19

    Yes, you can use the File API for this.

    Here's a complete example (see comments):

    document.getElementById("btnLoad").addEventListener("click", function showFileSize() {
        // (Can't use `typeof FileReader === "function"` because apparently it
        // comes back as "object" on some browsers. So just see if it's there
        // at all.)
        if (!window.FileReader) { // This is VERY unlikely, browser support is near-universal
            console.log("The file API isn't supported on this browser yet.");
            return;
        }
    
        var input = document.getElementById('fileinput');
        if (!input.files) { // This is VERY unlikely, browser support is near-universal
            console.error("This browser doesn't seem to support the `files` property of file inputs.");
        } else if (!input.files[0]) {
            addPara("Please select a file before clicking 'Load'");
        } else {
            var file = input.files[0];
            addPara("File " + file.name + " is " + file.size + " bytes in size");
        }
    });
    
    function addPara(text) {
        var p = document.createElement("p");
        p.textContent = text;
        document.body.appendChild(p);
    }
    body {
        font-family: sans-serif;
    }


    Slightly off-topic, but: Note that client-side validation is no substitute for server-side validation. Client-side validation is purely to make it possible to provide a nicer user experience. For instance, if you don't allow uploading a file more than 5MB, you could use client-side validation to check that the file the user has chosen isn't more than 5MB in size and give them a nice friendly message if it is (so they don't spend all that time uploading only to get the result thrown away at the server), but you must also enforce that limit at the server, as all client-side limits (and other validations) can be circumvented.

提交回复
热议问题