【问题标题】:Using Javascript FileReader with huge files使用 Javascript FileReader 处理大文件
【发布时间】:2013-07-04 14:02:17
【问题描述】:

我在使用 Javascript FileRead 尝试读取大文件时遇到问题。

例如,我有一个 200mb 的文本文件,每次我阅读这个文件时,代码都会停止工作。

可以读取文本文件,但例如只读取前 10 行或在 10mb 后停止读取?

这是我的代码:

var file = form.getEl().down('input[type=file]').dom.files[0];
var reader = new FileReader();

reader.onload = (function(theFile) {
                return function(e) {
                    data = e.target.result;
                    form.displayedData=data;
                };
            })(file);

reader.readAsText(file);

e.target.result 始终拥有文件的全部数据。

我可以在这里做什么?

谢谢

【问题讨论】:

    标签: javascript onload filereader


    【解决方案1】:

    这只会读取前 10 mb:

    var file = form.getEl().down('input[type=file]').dom.files[0];
    var reader = new FileReader();
    
    reader.onload = function(e) {
        var data = e.target.result;
        form.displayedData = data;
    };
    
    reader.readAsText(file.slice(0, 10 * 1024 * 1024));
    

    【讨论】:

    • 是的,这首先读取了 10mb,但文件仍在内存中,我认为最初的问题是关于读取大文件而不是将整个文件加载到内存中。我说的不对吗?
    • 是的@Yetti 我的问题是一样的。如果我们尝试打开 4GB 文件,file.slice 将尝试加载整个文件。
    • @Yetti 不,它只将 10mb 加载到内存中。
    • @Fatih Blob.slice (与File.slice 相同)不应该将整个文件加载到内存中,如果您仅按切片读取,它基本上是真正的文件流式传输(即尽管如此,实际的底层行为是特定于浏览器和系统的,例如,一个 200MB 的文件可能会被加载到 64GB RAM 系统的内存中,而不是 20GB 的文件)。相关:stackoverflow.com/questions/24833487/…chromium.googlesource.com/chromium/src/+/master/storage/browser/…
    • 谢谢@JohnWeisz 我会试试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2010-09-30
    相关资源
    最近更新 更多