如何使用Chrome应用程序文件系统将FileEntry转换为标准的JavaScript File对象

18
2个回答

27

FileEntry 文档在这方面提供了指导:

文件系统API的FileSystemFileEntry接口表示文件系统中的文件。它提供描述文件属性的属性以及file()方法,该方法创建可用于读取文件的File对象。

不幸的是,file()方法依赖于回调而不是Promises,但我们可以将其包装起来,使使用API(和阅读代码)更容易:

async function getFile(fileEntry) {
  try {
    return new Promise((resolve, reject) => fileEntry.file(resolve, reject));
  } catch (err) {
    console.log(err);
  }
}

// From inside an async method or JS module
let file = await getFile(fileEntry); // Wait until we have the file

1
嗨,我很好奇你在定义 getFile 时为什么使用了 async 和 await。如果你把它们去掉,直接返回 Promise,它不会起到同样的作用吗? - ack_inc
@ack_inc 是的,你说得对,它并没有添加任何内容,谢谢你注意到了这一点。已根据您的评论进行了编辑。 - xlm

3

3
不要忘记错误回调!在某些情况下(尽管很少),您将静默地永远不会得到回调。签名应为 entry.file(success, error) - kzahel
3
请注意,此代码是异步的:您无法立即使用 jsFileObject。 有关该问题的基于 Promise 的解决方案,请参阅 xlm 的 answer - Xan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接