自动上传本地文件,即使在Firefox中已更改

时间:2019-02-11 09:36:42

标签: javascript html5 filereader

我正在寻找一种解决方案,即使浏览器已被编辑,该浏览器也可以使其连续上传用户最初选择的本地文件。我有一个适用于chrome的解决方案,但是一旦文件被编辑,Firefox就会停止上传。该代码粘贴在下面。

function readSingleFile(e) {
  var readers = new Array();
  setInterval(function () {
  var file = e.target.files[0];
  readers.push(new FileReader());
  readers[readers.length-1].onload = function(e) {
    var contents = e.target.result;
    // Display file content
    displayContents(contents);
    console.log(contents);
  };
  readers[readers.length-1].readAsText(file);
}, 5000);
}

function displayContents(contents) {
  var element = document.getElementById('file-content');
  element.innerHTML += contents;
}

document.getElementById('file-input').addEventListener('change', readSingleFile, false);

1 个答案:

答案 0 :(得分:0)

文件对象在Chrome中处于“活动”状态-更改文件长度,并在再次读取时更改fileObject.length的值,读取文件的lastModified属性将返回最近的修改日期和时间,并读取文件的内容返回更新的内容(如文章中所述)。

文件对象目前在Firefox中。即使文件长度已更改,通过读取fileObject.length返回的值仍保持不变,而读取文件的lastModified属性则返回创建文件引用后的时间戳。尝试读取更新的文件会导致使用“ NotReadableError:无法读取文件”作为参数来调用文件读取器的onerror处理程序。

File API specification仍然是2019年2月1日的编辑草稿。File Interface section谈到对磁盘上的文件状态(名称,长度和最后修改日期)进行快照:

  

如果File对象是对源自磁盘上文件的字节序列的引用,则应将其快照状态设置为创建File对象时磁盘上文件的状态。

,并附上以下注释(强调我的意思):

  

注意:这是为用户代理实施的一项重要要求,因此不是必须的,而是应该的 [RFC2119]。用户代理应努力在进行引用时将文件对象的快照状态设置为磁盘上基础存储的状态。如果在获取引用之后在磁盘上修改了文件,则文件的快照状态将与基础存储的状态不同。用户代理可以使用修改时间戳和其他机制来维护快照状态,但这留作实现细节。

我的理解是,在标准制定的现阶段,Firefox不需要实现Chrome的行为即可“兼容”。同时,如果Firefox在将来的某个时候采用该建议草案,或者选择不这样做,我也不会感到惊讶。

总而言之,我很怀疑目前有 个满足您要求的Firefox解决方案。