带有 base64 数据内容的 HTML5 对象标签导致 Chrome 崩溃

2023-11-30

我正在使用 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(使用前将#替换为@)

带有 base64 数据内容的 HTML5 对象标签导致 Chrome 崩溃 的相关文章