在html5中使用filewriter api写两次会导致错误

writing twice using filewriter api in html5 leads to error

本文关键字:两次 错误 html5 filewriter api      更新时间:2023-09-26

我正在尝试在HTML中使用BlobBuilder和FileWriter API将数据写入文件。我的问题是,如果我使用写函数两次,就会出现错误。以下内容代码执行正常:

  var bb = new window.WebKitBlobBuilder();
  bb.append('LOREL');
  outWriter.write(bb.getBlob('text/plain'));

但是如果我把它改成如下(试着写两次)

  var bb = new window.WebKitBlobBuilder();
  bb.append('LOREL');
  outWriter.write(bb.getBlob('text/plain'));
  bb.append('LOREL');
  outWriter.write(bb.getBlob('text/plain'));

我犯了一个错误。错误代码为:INVALID_STATE_ERR

如有任何帮助,我们将不胜感激。

问题是FileWriter.write()是异步的,您试图在第一次写入完成之前向文件写入更多数据。根据规范,如果readyState==WRITING,则应该抛出一个FileException。很可能是你的情况。你需要这样的东西:

var bb = new window.WebKitBlobBuilder();
bb.append('LOREL');
outWriter.onwrite = function(e) {
  bb.append('LOREL');
  outWriter.write(bb.getBlob('text/plain'));
};
outWriter.write(bb.getBlob('text/plain'));

此外,我希望您的代码片段只是一个示例,而不是实际的追加、写入、追加、写入。否则,使用一个write():

var bb = new window.WebKitBlobBuilder();
bb.append('LOREL');
bb.append('LOREL');
outWriter.write(bb.getBlob('text/plain'));