首页 > 解决方案 > 获取大文件加载进度结果

问题描述

获得小于 2GB 的文件没有问题,但是当我选择大于 2GB 的跨度时,什么也不输出。

<input type="file" name="vf" id="vf">
<span id="fileprecent"></span>

<script>

    function byid(e){ return document.getElementById(e); }
    function mc(e){ return Math.ceil(e); }

    var vf=byid("vf");
    var fpercent = byid("fileprecent");

    vf.addEventListener( "change", () => {

            var fr = new FileReader();
            var chunk = [];

            fr.addEventListener( "loadend",frLoadEnd );
            fr.addEventListener( "progress",frProgress );

            function frLoadEnd( e ){
                var dataURL = e.target.result;
                var dataLength = e.target.result.length;
                var chunkSize = ( dataLength/100 );
                for( var i = 0; i < 100; i++ ){
                    var lastChunk = ( chunkSize*( i+1 ) );
                    var firstChunk = ( lastChunk-chunkSize );
                    chunk.push( dataURL.slice( firstChunk,lastChunk ) );
                }
            }

            function frProgress( e ){
                var percent = Math.round( ( e.loaded/e.total )*100 );
                fpercent.textContent = ( percent + " % Loaded" );
            }

            fr.readAsDataURL( vf.files[0] );
    } );

</script>

错误

选择大于 2GB 的文件时出现 javascript 错误

(索引):22 未捕获的类型错误:无法在 FileReader.frLoadEnd 读取 null 的属性“长度”

标签: javascript

解决方案


推荐阅读