我正在使用 HTML5 FileReader 读取本地文件。然后,我想在上传到服务器之前立即在浏览器中显示文件内容。
我读取该文件并尝试显示它,如下所示:
var reader = new FileReader();
reader.onloadend = function () {
_moleculefilestream = reader.result;
_molecule.filename = filelist[0].name;
var filetype = _molecule.filename.substring(_molecule.filename.length - 3);
var html = '';
if (filetype == 'jpg' || filetype == 'gif' || filetype == 'png' || filetype == 'tif' || filetype == 'bmp') {
html += '<img src="' + reader.result + '" />';
}
else {
html += '<object id="zzzxxx" data="' + reader.result + '"';
if (filetype.toLowerCase() == 'pdf') {
// For pdf docs, specify a height and width
html += ' width="770" height="350"';
}
html += '>';
html += '</object>';
}
alert('we get here fine');
$('#molecule-docviewer').html(html);
alert('we have crashed by this point');
MarkMoleculeAsDirty();
}
reader.readAsDataURL(filelist[0]);
当我在 Chrome 中上传大约 1.5Mb 的 pdf 时,一切正常。当我尝试以 1.5Mb 或更大的速度上传时,Chrome (V15) 崩溃并显示“aw snap”消息。它显示“我们到达这里很好”消息,但在下一行崩溃。
有人对如何修复或解决方法有任何好主意吗?谢谢。
您应该高度考虑使用blob URL而不是数据 URL。您实际上并没有操作文件的字节,因此没有理由将整个文件读入内存,然后添加 33% 的 Base64 开销将其编码为数据 URL。
window.URL = window.URL || window.webkitURL;
var file = filelist[0];
var url = window.URL.createObjectURL(file);
var html = '';
if (file.type && file.type.match('image/.*')) {
html += '<img src="' + url + '" />';
}
....
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)