Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chrome中的Javascript FileReader.onload event.currentTarget.result.ByTeleLength=0_Javascript_Html_Google Chrome_Filereader - Fatal编程技术网

Chrome中的Javascript FileReader.onload event.currentTarget.result.ByTeleLength=0

Chrome中的Javascript FileReader.onload event.currentTarget.result.ByTeleLength=0,javascript,html,google-chrome,filereader,Javascript,Html,Google Chrome,Filereader,我试图通过迭代片来读取javascript Blob,并在使用FileReader读取片后从片中重新创建Blob。在最新的Chrome中,这会间歇性地导致 event.currentTarget.result.ByTeleLength=0 或 在处理操作时找不到请求的文件或目录 过程是 1创建一个1MB的blob 2使用FileReader.onload的回调,以1024字节的增量逐个切片 3通过FileReader读取每个片段,创建一个新Blob并保存它 4重复步骤2,创建一个新的Blob,包

我试图通过迭代片来读取javascript Blob,并在使用FileReader读取片后从片中重新创建Blob。在最新的Chrome中,这会间歇性地导致

event.currentTarget.result.ByTeleLength=0

在处理操作时找不到请求的文件或目录

过程是

1创建一个1MB的blob

2使用FileReader.onload的回调,以1024字节的增量逐个切片

3通过FileReader读取每个片段,创建一个新Blob并保存它

4重复步骤2,创建一个新的Blob,包括当前读取和上一个读取

如果一切顺利的话,我们有一个和原来一样的斑点

这在Chrome中间歇性失效

这是一把小提琴。确保打开控制台查看器

更精致的小提琴


我遗漏了什么?

您应该使用event.target.result来代替currentTarget。它可能会解决您的问题,

看起来像是上一次Chrome更新,42.0.2311.135,修复了它。
<html>
<body>
Blob Test
<script>

    var end = 0, i = 0, size, newBlob = new Blob(), partBlob;

    var readSlice = function(event){
        var bytesRead = event.currentTarget.result.byteLength;
        if ( bytesRead > 0){
            newBlob = new Blob([newBlob, event.currentTarget.result]);
        }else{
            log("Zero bytes read" , event);
            return;
        }
        i = i + 1024;
        //i = i + bytesRead;
        end = i + 1024;
        if ( end > bigBlob.size ) {
            end = bigBlob.size;
        }
        if ( i < bigBlob.size){
            log("i:"+i + " end:" + end);
            read(bigBlob, i, end);
        }else{
            log(newBlob);
            log(bigBlob);
            newBlob = null;
            bigBlob = null;
        }
    };
    function read(blob, start, end){
        partBlob = blob.slice(start, end);
        log("sliced " + start + ":"+ end+", partBlob size: " + partBlob.size);
        var reader = new FileReader();
        reader.onerror = error;
        reader.onabort = onabort;
        reader.onload = readSlice;
        reader.readAsArrayBuffer(partBlob);
    };
    function error(e){
        log("error " , e);
        log("i:" + i + " end:" + end);
    };
    function onabort(e){
        log("aborted", e);
        error(e);
    };

    function buildBlob(kb){
        var uintKbArr = new Uint8Array(1024);
        for(var i=0;i<uintKbArr.length;i++){
            uintKbArr[i]=i%256;
        }
        var blobArray = [];
        for(var i=0;i<kb;i++){
            var b = new Blob([uintKbArr]);//adds a MB each time
            blobArray.push(b);
        }
        bigBlob = new Blob(blobArray);
        return bigBlob;
    }

    function log(m, o){
        if ( o ){
            console.log(m,o);
        }else{
            console.log(m);
        }

    }
    var bigBlob = buildBlob(1024);
    size = bigBlob.size;
    log("Blob size " + size);
    read(bigBlob, 0, 1024);

</script>
</body>
</html>