如何使用 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】:

FileEntrydocumentation 确实在这里提供了指导:

文件系统 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 对象的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenOffice calc 中导入 .fil 文件

将文件类型与 Chrome 打包应用程序相关联

如何将 .MP4 文件等本地文件流式传输到 Chrome Cast?

如何在恒讯云服务器上搭建个人IPFS分布式存储文件系统?

如何从chrome扩展获取系统代理设置?

如何判断 chrome 应用程序正在使用啥操作系统? [复制]