FileReader.readAsBinaryString() is not support IE 10, 11

谁说胖子不能爱 提交于 2021-02-11 01:43:18

问题


The below code works in chrome browser.

$('#file').change(function(e) {
    var fileReader = new FileReader(),
        file = e.target.files[0];

        if (typeof fileReader.readAsBinaryString == "function") {
            // section #1
            var binaryString, base64;

            fileReader.onload = function(readerEvt) {
                binaryString = readerEvt.target.result;
                base64 = 'data:'+type+';base64,'+btoa(binaryString);
                socket.emit('image', { image: base64, size: file.size, filename: file.name });
            }

            fileReader.readAsBinaryString(file);
        }else{

            // section #2 in IE 10, 11...
            var binary = "", bytes = e.target.result, length = bytes.length;

            for (var i=0; i<length; i++) {
                binary += String.fromCharCode(bytes[i]);
            }

            // How can I control 'binary' variable for IE 10, 11

        }
});

I want to make it work the same as in Google Chrome.

Please implementing the source code into section #2.


回答1:


All though the documentation says that the readAsBinaryString function is defined, but it still gives Can't be resolved and function definition not found errors.

You can try this code. It has worked for me. Please refer my comments for the help.

I have tested the code in IE 11 and Chrome.

Html Code

<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
    <script src="index.js"></script>
</head>
<body>
    <input type="file" id="files" onchange="handleFileSelect(event)"/>
    <output id="list"></output>
</body>
</html>

Javascript Code

//readAsBinaryString function is not defined in IE
//Adding the definition to the function prototype
if (!FileReader.prototype.readAsBinaryString) {
    console.log('readAsBinaryString definition not found');

    FileReader.prototype.readAsBinaryString = function (fileData) {
        var binary = '';
        var pk = this;
        var reader = new FileReader();

        reader.onload = function (e) {
            var bytes = new Uint8Array(reader.result);
            var length = bytes.byteLength;

            for (var i = 0; i < length; i++) {
                var a = bytes[i];

                var b = String.fromCharCode(a)
                binary += b;
            }

            pk.content = binary;
            $(pk).trigger('onload');
        }

        reader.readAsArrayBuffer(fileData);
    }
}

function handleFileSelect(evt) {
    console.log(evt);

    var reader = new FileReader();

    reader.onload = function(e){
        if (reader.result)
            reader.content = reader.result;

        //In IE browser event object is null
        var data = e ? e.target.result : reader.content;
        var baseEncoded = btoa(data);
        var wb = XLSX.read(baseEncoded, {type: 'base64'});

        processWorkbook(wb);
    };

    reader.onerror = function(ex){
        console.log(ex);
    };

    //I'm reading the first file
    //You can modify it as per your need
    console.log(evt.target.files[0]);

    reader.readAsBinaryString(evt.target.files[0]);
}

function processWorkbook(workbook) {

    console.log(workbook.Sheets['sheet_name']['excel_cell_name_to_be_accessed'].v);

    //For example
    console.log(workbook.Sheets['sheet1']['C2'].v);

    //you can iterate through all the sheets
    for(var i = 0; i < workbook.SheetNames.length; i++) {
        workbook.SheetNames[i]['cell_name_to_be_accessed'] //rest of the processing
    }

    //You can now work with the workbook as per your requirements
}


来源:https://stackoverflow.com/questions/31086243/filereader-readasbinarystring-is-not-support-ie-10-11

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!