FileReader仅读取小文件,否则返回null

时间:2018-10-10 12:28:04

标签: javascript

所以我当前正在使用以下代码将文件读取为base64:

function getBase64(file) {
    return new Promise(function(resolve, reject) {
        var fr = new FileReader();
        fr.readAsDataURL(file);
        fr.onload = resolve(fr);
  });
}

现在,每当我加载超过一定大小的文件(不确定文件大小)时,它会为fr.result返回null。

但这似乎不是Google Chrome浏览器的问题。对于任何文件大小,它将返回base64。我目前正在使用Microsoft Edge进行测试。

1 个答案:

答案 0 :(得分:1)

resolve(fr)正在同步求值,应该包装在一个函数中。您仍然会看到一些数据,因为readAsDataURL正在异步运行,并且在调用resolve(fr)之前已经设法读取了一些数据。

您可能还应该在开始读取文件之前注册处理程序。

function getBase64(file) {
    return new Promise(function(resolve, reject) {
        var fr = new FileReader();
        fr.onload = function() { resolve(fr); };
        fr.readAsDataURL(file);
  });
}