如何使用 Chrome 应用程序文件系统将 FileEntry 转换为标准 JavaScript File 对象
Posted
技术标签:
【中文标题】如何使用 Chrome 应用程序文件系统将 FileEntry 转换为标准 JavaScript File 对象【英文标题】:How to convert FileEntry to standard JavaScript File object using chrome apps fileSystem 【发布时间】:2017-12-16 14:21:10 【问题描述】:是否可以将FileEntry
转换为标准javascript 对象File
?
我在文档中找不到任何有意义的东西 https://developer.chrome.com/apps/fileSystem
【问题讨论】:
【参考方案1】:FileEntry
documentation 确实在这里提供了指导:
文件系统 API 的
FileSystemFileEntry
接口代表一个 文件系统中的文件。它提供了描述文件的属性 属性,以及创建 File 对象的file()
方法 可用于读取文件。
不幸的是,file()
method 依赖于回调而不是 Promises,但我们可以将其包装起来,让 API 的使用(和代码阅读)更容易:
async function getFile(fileEntry)
try
return await new Promise((resolve, reject) => fileEntry.file(resolve, reject));
catch (err)
console.log(err);
var file = await getFile(fileEntry);
请注意,FileSystemFileEntry
是非标准功能,不是标准轨道,因此 API 和浏览器支持可能会发生变化!
【讨论】:
【参考方案2】:我在谷歌示例https://github.com/GoogleChrome/chrome-app-samples/blob/master/samples/filesystem-access/js/app.js中找到了如何做到这一点
var jsFileObject;
fileEntry.file(function (file)
jsFileObject = file
);
【讨论】:
不要忘记错误回调!在某些(尽管)极少数情况下,您将永远不会得到回调。签名应该是entry.file(success,error)
注意这段代码是异步的:你不能立即使用jsFileObject
。请参阅 xlm 的 answer,了解基于 Promise 的解决方案。以上是关于如何使用 Chrome 应用程序文件系统将 FileEntry 转换为标准 JavaScript File 对象的主要内容,如果未能解决你的问题,请参考以下文章