我们尝试使用客户端上的“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>