Cordova 插件文件

2024年8月29日 | 阅读 7 分钟

Cordova 的文件插件实现了一个 File API,允许用户对存储的设备文件执行读/写操作。在 Cordova 框架中,我们可以通过使用 file 插件轻松地使用文件处理。此插件允许用户访问文件的所有主要功能,如 读取、写入、访问、删除 等。

此插件定义了一个全局 cordova.file 对象,并且只有在执行 deviceready 事件后才可用。

安装

要在您的应用程序中添加 Cordova 文件插件,首先您需要安装它。为此,在命令提示符下键入以下命令

此插件受不同平台的支持,如 Android、Windows、iOS、Browser 等。但是,在这些平台上不支持 FileReader.readAsArrayBufferFileWriter.write(blob) 对象。

File API 要求的用户是什么?

File API 需要用户端执行一些特定任务,如下所示

  • 请求文件系统。
  • 指定文件大小。
  • 将文件指定为临时或永久文件。
  • 为此请求指定成功和错误处理程序。

在哪里存储文件?

重要的 文件系统 目录以 v1.2.0 URL 的形式提供。这些 URL 形式如下:file:///path/to/spot/。如果要将这些 URL 转换为 DirectoryEntry, 您可以通过使用 window.resolveLocalFileSystemURL() 轻松完成。以下是一些可以存储文件的目录

  • cordova.file.applicationDirectory - 这是一个 只读目录,用于存储主应用程序。此目录适用于 Android、iOS、Windows、BlackBerry 10、OSX 平台。
  • cordova.file.applicationStorageDirectory - 这是应用程序沙箱的根目录。此位置对 iOS 和 Android 平台是只读的。但是对于某些特定的子目录,它是作为读写操作提供的,例如 iOS 的 /Documents 和 Windows 平台的 /localState。子目录中包含的重要数据是应用程序私有的(iOS、Android、BlackBerry 10、OSX)。
  • cordova.file.dataDirectory - 应用程序的沙箱包含使用内部存储器的持久和私有数据存储。要在 Android 平台上使用外部存储器,可以使用 .externalDataDirectory

对于 iOS 平台,此目录不同步 iCloud。要将目录与 iCloud 同步,您可以使用 .syncedDataDirectory

  • cordova.file.cacheDirectory - 此目录包含 缓存的数据文件。它还包括您的应用程序可以轻松重新创建的那些文件。如果系统存储空间不足,操作系统可以删除这些文件。
  • cordova.file.externalApplicationStorageDirectory - 对于 Android 平台,此目录在外部存储器上提供应用程序空间。
  • cordova.file.externalDataDirectory - 此目录用于 Android 平台,应用程序特定的数据文件存储在外部存储器上。
  • cordova.file.externalCacheDirectory - 此目录存储 Android 平台上的外部存储器上的应用程序缓存。
  • cordova.file.externalRootDirectory - 此目录用于 Android、BlackBerry 10 平台的外部存储根目录。
  • cordova.file.tempDirectory - 此目录可以清除文件,并且不依赖于操作系统来清除它。应用程序必须删除适用的文件。(Windows、iOS、OSX)。
  • cordova.file.syncedDataDirectory - 它包含与应用程序相关的文件同步,例如 iCloud
  • cordova.file.documentsDirectory - 它包含应用程序私有的文件。这些文件与其他应用程序(如 Office 文件)具有连接。对于 iOS 和 OSX 平台,它是 用户的 ~/Documents 目录
  • cordova.file.sharedDirectory - 一个目录包含所有应用程序全局可用的文件。它仅用于 BlackBerry 10。

升级说明

引入文件插件的 v1.0.0 后,FileEntryDirectoryEntry 的结构已根据发布的规范进行了更改。

在之前的版本中,文件的绝对位置存储在 Entry 对象的 fullPath 属性中。但是,使用文件插件的 v1.0.0fullPath 属性用于定义文件的路径,该路径相对于 HTML 文件系统的根目录。我们在下面展示了在 v1.0.0 之前 iOSAndroid 平台的典型文件路径

由于文件插件的 v1.0.0,上述路径可以通过 FileEntry 属性显示,该属性的 fullPath

您需要更新您的代码以使用 entry.toURL() 方法,而不是使用 Entry 对象的 fullPath 属性。此方法应在以下两种情况下使用

情况 1:当您的应用程序处理 设备绝对路径 时,

情况 2:路径之前是通过 Entry 对象的 fullPath 属性检索的。

在使用设备绝对路径时,在文件传输插件中遇到了一些问题。因此,旧的插件版本已更新以正确处理文件系统 URL。为此,entry.fullPath 被替换为 entry.toURL() 方法。此方法用于解决在设备上处理文件时遇到的任何问题。

文件插件 v1.1.0 的更新更改了 toURL() 方法的返回值,以便在可能的情况下返回一个绝对的 'file://' URL。新版本还添加了 toInternalURL() 方法以确保 'cdvfile:'-URL。此方法还用于通过以下形式返回文件系统 URL 来唯一标识该文件

文件操作

我们可以使用 Cordova 的文件插件对这些特定文件执行很多操作。它允许用户执行各种操作,如 创建、访问、读取、写入、显示、附加 到文件。我们还可以选择将文件存储在项目的临时或永久存储位置。如果我们需要将文件存储在其他平台相关的特定位置,我们可以通过文件插件轻松地完成。

创建持久文件

在为我们的项目创建持久文件之前,我们首先必须访问文件系统。借助 requestFileSystem, 我们可以访问持久或临时存储。如果需要临时或持久存储,您可以通过 requestFileSystem 请求它。除非用户授予权限,否则我们无法删除持久存储。

当您通过 requestFileSystem 获得文件系统访问权限时,仅为沙箱文件系统授予此权限。此方法不提供对设备上任何文件系统位置的通用访问权限。您可以使用其他方法来访问沙箱存储之外的文件系统位置,例如 window.resolveLocalFileSystemURL,因为它支持平台特定的位置。

以下代码演示了持久存储的请求。

注意:如果针对本机应用程序或 WebView 客户端,则在使用持久存储之前,我们不需要使用 requestQuota。

创建临时文件

在临时存储中,当系统存储空间不足时,可以删除文件。在这里,我们演示了一个请求临时存储的示例。

要在临时存储中创建新文件或检索任何现有文件,我们必须调用 getFile 函数。为了执行读取或写入操作,getFile 函数返回一个 FileEntry 对象。

写入文件

要写入文件,首先我们需要一个 FileEntry 对象。之后,我们可以调用 createWriter 方法来写入文件。此方法为函数的成功回调返回一个 FileWriter 对象。调用 FileWriter 对象的 write 方法以写入文件。

读取文件

为了读取任何现有数据文件,首先我们需要一个 FileEntry 对象。为了获取文件的引用,我们可以使用此对象的 file 属性。

要开始读取操作,我们可以使用 readAsText 方法,当操作完成后,this.result 对象用于存储读取操作的结果。

代码