JS原生上传文件,读取文件格式,控制文件只可以上传某些格式,并使用fileReader转换格式

本文为代码片段记录,方便后期使用哇!

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .myitem-one-list {
             500px;

        }

        .ng-star-inserted {
            text-align: center;
        }

        .fileinput-button {
            position: relative;
            /* // display: inline-block; */
            overflow: hidden;
            cursor: pointer;
        }

        .fileinput-button input {
            position: absolute;
            right: 0px;
            top: -20px;
            opacity: 0;
            -ms-filter: 'alpha(opacity=0)';
            font-size: 50px;
        }
    </style>
</head>

<body>
    <div style="padding:20px;display:flex">
        <div style="text-align: center;display:inline-block;overflow: hidden;">
            <span class=" fileinput-button">
                <span  style="display:inline-block;line-height: 30px">点击上传文件</span>
                <input type="file" onChange="readExcel()" id="myfile01" />
            </span>
        </div>
    </div>

    <div>
    </div>

    <script>

        function readExcel() {
            let files = document.getElementById('myfile01').files
            console.log(files);
            if (files.length <= 0) {//如果没有文件名
                return false;
            } else if (!/\.(xls|xlsx|jpg)$/.test(files[0].name.toLowerCase()) || errorFileSize(files[0], '1MB')) {
                console.log('上传格式不正确,请上传xls或者xlsx、jpg格式,且文件大小不得超过1mb');
                return false;
            }
            const fileReader = new FileReader();
            fileReader.onload = (ev) => {
                try {
                    const data = ev.target.result;
                    console.log(data)
                    // 这里可以写其他操作啦
                } catch (e) {
                    console.log('出错了')
                    return false;
                }
            };
            fileReader.readAsDataURL(files[0]);
            // readAsArrayBuffer(file): void 异步按字节读取文件内容,结果用ArrayBuffer对象表示
            // readAsBinaryString(file): void 异步按字节读取文件内容,结果为文件的二进制串
            // readAsDataURL(file): void 异步读取文件内容,结果用data: url的字符串形式表示
            // readAsText(file, encoding): void 异步按字符读取文件内容,结果用字符串形式表示
        }
        /**
        * 限制文件大小,返回 true代表文件格式有误
        * @param {File} file 文件
        * @param {String} limitSize 限制大小
        * 使用方法:limitFileSize(files[0], '1MB')
        */
        function errorFileSize(file, limitSize) {
            var arr = ["KB", "MB", "GB"]
            var limit = limitSize.toUpperCase();
            var limitNum = 0;
            for (var i = 0; i < arr.length; i++) {
                var leval = limit.indexOf(arr[i]);
                if (leval > -1) {
                    limitNum = parseInt(limit.substr(0, leval)) * Math.pow(1024, (i + 1))
                    break
                }
            }
            if (file.size > limitNum) {
                return true
            }
            return false
        }

    </script>
</body>

</html>
原文地址:https://www.cnblogs.com/sugartang/p/15527659.html