4

我们尝试使用客户端上的“FileReader”javascript 对象上传一个 zip 文件。对于小文件,一切似乎都很好。如果我们使用 132Mo 的 zip 输入文件,在 Windows 7 上的 Firefox v21.0 中,通过 javascript 对象从本地磁盘首次上传效果很好。但是,如果我们尝试选择另一个文件并开始传输,Firefox 会崩溃……。在 Windows 7 上的 Chrome v27.0 中,它在第一次尝试时崩溃(参见“oups”页面)。我们在具有相同浏览器的 Mac OS 上进行了尝试,没有问题。主要是奇怪,但是当 Windows 任务管理器窗口打开时,在加载大文件时不会再在 Firefox 或 Chrome 中崩溃。也许这个 TOP 窗口的存在迫使垃圾收集器更快地完成它的工作?

有没有人已经面临这个问题?作为参考,我加入了一个可以重现该行为的简单 HTML 页面。

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function ()
    {
        $("#btnFile").change(startUpload);
    });

    function startUpload(e)
    {
        this.fileHandle = e.target.files[0];
        var reader = new FileReader();

        reader.onprogress = function (data)
        {
            if (data.lengthComputable)
            {
                var progress = parseInt(((data.loaded / data.total) * 100), 10);
                $("#progress").html("Reading file: " + progress + " %");
            }
        };
        reader.onloadend = function ()
        {
            $("#progress").html("Reading completed!");
        };
        reader.onerror = function (errorEvent)
        {
            console.error("FileReader error", errorEvent);
        };

        reader.readAsDataURL(this.fileHandle);
    };
    </script>
</head>
<body>
    <input type="file" id="btnFile" />
    <div id="progress"></div>
</body>
</html>
4

0 回答 0