将大文件作为切片读取时,HTML5 FileReader API会崩溃chrome 17 [英] HTML5 FileReader API crashes chrome 17 when reading large file as slice

查看:714
本文介绍了将大文件作为切片读取时,HTML5 FileReader API会崩溃chrome 17的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将大文件(3GB)读为100Mb。

I'm trying to read large file (3GB) as slice as 100Mb.

      ***function sliceMe() {
            var file = document.getElementById('files').files[0],
            fr = new FileReader;
            var chunkSize = document.getElementById('txtSize').value;
            chunkSize =1048576;            

            var chunks = Math.ceil(file.size / chunkSize);
            var chunk = 0;

            document.getElementById('byte_range').innerHTML = "";

            function loadNext() {
                var start, end,
                blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice;
                start = chunk * chunkSize;
                if (start > file.size)
                    start = end+1;
                end = start + (chunkSize -1) >= file.size ? file.size : start + (chunkSize -1);
                fr.onload = function(e) {      
                    if (++chunk <= chunks) {
                        document.getElementById('byte_range').innerHTML += chunk + "  " +
                            ['Read bytes: ', start , ' - ', end,
                            ' of ', file.size, ' byte file'].join('')+"<br>";                        
                        //console.info(chunk);
                        loadNext(); // shortcut here

                    }
                };
                fr.readAsArrayBuffer(blobSlice.call(file, start, end));

            }
            loadNext();
        }***

以上代码在Firefox和Chrome 16中按预期工作。但是,在Chrome 17& 18dev版本,在阅读1GB数据浏览器崩溃后。

Above code works as expected in Firefox and in Chrome 16. But in Chrome 17 & 18dev version, after reading 1GB data browser crashes.

在Chrome 17中是否已知问题?

Is it known issue in Chrome 17?

推荐答案

我在阅读1.8 GB文件时遇到了同样的问题。如果我看任务管理器,chrome.exe会占用1.5 GB的内存然后崩溃。我的解决方案是使用Javascript工作,然后使用FileReaderSync而不是FileReader。 JavaScript工作者在一个单独的线程中运行,而FileReaderSync只能在JavaScript工作器中工作。

I had the same problem reading in a 1.8 GB file. If I watch task manager, chrome.exe would take up to 1.5 GB of memory and then crash. My solution was to use a Javascript worker and then use FileReaderSync instead of FileReader. The javascript worker runs in a separate thread, and FileReaderSync will only work in a javascript worker.

这篇关于将大文件作为切片读取时,HTML5 FileReader API会崩溃chrome 17的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆