小程序开发API之文件getFileSystemManager()

  • Post author:
  • Post category:小程序




文件系统

文件系统是小程序提供的一套以小程序和用户维度隔离的存储以及一套相应的管理接口。通过 wx.getFileSystemManager() 可以获取到全局唯一的文件系统管理器,所有文件系统的管理操作通过 FileSystemManager 来调用。


const fs = wx.getFileSystemManager()

文件主要分为两大类:

  • 代码包文件:代码包文件指的是在项目目录中添加的文件。
  • 本地文件:通过调用接口本地产生,或通过网络下载下来,存储到本地的文件。

其中本地文件又分为三种:

  1. 本地临时文件:临时产生,随时会被回收的文件。不限制存储大小。
  2. 本地缓存文件:小程序通过接口把本地临时文件缓存后产生的文件,不能自定义目录和文件名。除非用户主动删除小程序,否则不会被删除。跟本地用户文件共计,

    普通小程序最多可存储 10MB

    ,游戏类目的小程序最多可存储 50MB。
  3. 本地用户文件:小程序通过接口把本地临时文件缓存后产生的文件,允许自定义目录和文件名。除非用户主动删除小程序,否则不会被删除。跟本地缓存文件共计,

    普通小程序最多可存储 10MB

    ,游戏类目的小程序最多可存储 50MB。



代码包文件

由于代码包文件大小限制,代码包文件适用于放置首次加载时需要的文件,对于内容较大或需要动态替换的文件,不推荐用添加到代码包中,推荐在小游戏启动之后再用下载接口下载到本地。


访问代码包文件


代码包文件的访问方式是从项目根目录开始写文件路径,不支持相对路径的写法。

在这里插入图片描述


修改代码包文件


代码包内的文件无法在运行后动态修改或删除,修改代码包文件需要重新发布版本。



本地文件

本地文件指的是小程序被用户添加到手机后,会有一块独立的文件存储区域,以用户维度隔离。

即同一台手机,每个微信用户不能访问到其他登录用户的文件



同一个用户不同 appId 之间的文件也不能互相访问



在这里插入图片描述

本地文件的文件路径均为以下格式:


{

{协议名}}://文件路径

其中,协议名在 iOS/Android 客户端为 “wxfile”,在开发者工具上为 “http”,开发者无需关注这个差异,也不应在代码中去硬编码完整文件路径。


本地临时文件



本地临时文件只能通过调用特定接口产生,不能直接写入内容。

本地临时文件产生后,仅在当前生命周期内有效,重启之后即不可用。因此,不可把本地临时文件路径存储起来下次使用。如果需要下次在使用,可通过 FileSystemManager.saveFile() 或 FileSystemManager.copyFile() 接口把本地临时文件转换成本地缓存文件或本地用户文件。

示例

wx.chooseImage({
  success(res) {
    const tempFilePaths = res.tempFilePaths // tempFilePaths 的每一项是一个本地临时文件路径
  }
})


本地缓存文件



本地缓存文件只能通过调用特定接口产生,不能直接写入内容。

本地缓存文件产生后,重启之后仍可用。本地缓存文件只能通过 FileSystemManager.saveFile() 接口将本地临时文件保存获得。

示例

fs.saveFile({
  tempFilePath: '', // 传入一个本地临时文件路径
  success(res) {
    console.log(res.savedFilePath) // res.savedFilePath 为一个本地缓存文件路径
  }
})

注意:本地缓存文件是最初的设计,1.7.0 版本开始,提供了功能更完整的本地用户文件,可以完全覆盖本地缓存文件的功能,如果不需要兼容低于 1.7.0 版本,可以不使用本地缓存文件。


本地用户文件


我们提供了一个用户文件目录给开发者,开发者对这个目录有完全自由的读写权限。通过

wx.env.USER_DATA_PATH

可以获取到这个目录的路径。

示例

// 在本地用户文件目录下创建一个文件 hello.txt,写入内容 "hello, world"
const fs = wx.getFileSystemManager()
fs.writeFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'hello, world', 'utf8')



读写权限
在这里插入图片描述



文件API



wx.saveFile(Object object)

保存文件到本地。

注意

  • saveFile 会把临时文件移动,因此调用成功后传入的 tempFilePath 将不可用
  • 本地文件存储的大小限制为 10M


参数Object object

在这里插入图片描述


object.success 回调函数参数res

在这里插入图片描述

示例代码

选择照片保存文件到本地

wx.chooseImage({
  success(res) {
    const tempFilePaths = res.tempFilePaths
    wx.saveFile({
      tempFilePath: tempFilePaths[0],
      success(res) {
        const savedFilePath = res.savedFilePath
      }
    })
  }
})



wx.removeSavedFile(Object object)

删除本地缓存文件


参数Object object

在这里插入图片描述

示例代码

获取本地文件的文件信息并删除你要删的文件

wx.getSavedFileList({
  success(res) {
    if (res.fileList.length > 0) {
      wx.removeSavedFile({
        filePath: res.fileList[0].filePath,
        complete(res) {
          console.log(res)
        }
      })
    }
  }
})



wx.openDocument(Object object)

新开页面打开文档


参数Object object

在这里插入图片描述


object.fileType 的合法值

在这里插入图片描述

示例代码

下载文件并文档打开

wx.downloadFile({
  // 示例 url,并非真实存在
  url: 'http://example.com/somefile.pdf',
  success(res) {
    const filePath = res.tempFilePath
    wx.openDocument({
      filePath,
      success(res) {
        console.log('打开文档成功')
      }
    })
  }
})



wx.getSavedFileList(Object object)

获取该小程序下已保存的本地缓存文件列表


参数Object object

在这里插入图片描述


object.success 回调函数参数res

在这里插入图片描述


res.fileList 的结构

在这里插入图片描述

示例代码

获取该小程序下已保存的本地缓存文件列表

wx.getSavedFileList({
  success(res) {
    console.log(res.fileList)
  }
})



wx.getSavedFileInfo(Object object)

获取本地文件的文件信息。此接口只能用于获取已保存到本地的文件,若需要获取临时文件信息,请使用 wx.getFileInfo() 接口。


参数Object object

在这里插入图片描述


object.success 回调函数参数res

在这里插入图片描述

示例代码

获取本地文件的文件信息。

wx.getSavedFileList({
  success(res) {
    console.log(res.fileList)
  }
})



wx.getFileInfo(Object object)

获取文件信息


参数Object object

在这里插入图片描述


object.digestAlgorithm 的合法值

在这里插入图片描述


object.success 回调函数参数res

在这里插入图片描述

示例代码

wx.getFileInfo({
  success(res) {
    console.log(res.size)
    console.log(res.digest)
  }
})



wx.getFileSystemManager()

获取全局唯一的文件管理器


返回值


FileSystemManager 文件管理器



方法


FileSystemManager.access(Object object)


判断文件/目录是否存在


FileSystemManager.appendFile(Object object)


在文件结尾追加内容


FileSystemManager.saveFile(Object object)


保存临时文件到本地。此接口会移动临时文件,因此调用成功后,tempFilePath 将不可用。


FileSystemManager.getSavedFileList(Object object)


获取该小程序下已保存的本地缓存文件列表


FileSystemManager.removeSavedFile(Object object)


删除该小程序下已保存的本地缓存文件


FileSystemManager.copyFile(Object object)


复制文件


FileSystemManager.getFileInfo(Object object)


获取该小程序下的 本地临时文件 或 本地缓存文件 信息


FileSystemManager.mkdir(Object object)


创建目录


FileSystemManager.readdir(Object object)


读取目录内文件列表


FileSystemManager.readFile(Object object)


读取本地文件内容


FileSystemManager.rename(Object object)


重命名文件。可以把文件从 oldPath 移动到 newPath


FileSystemManager.rmdir(Object object)


删除目录


FileSystemManager.stat(Object object)


获取文件 Stats 对象


FileSystemManager.unlink(Object object)


删除文件


FileSystemManager.unzip(Object object)


解压文件


FileSystemManager.writeFile(Object object)


写文件



Stats

描述文件状态的对象



属性


string mode


文件的类型和存取的权限,对应 POSIX stat.st_mode


number size


文件大小,单位:B,对应 POSIX stat.st_size


number lastAccessedTime


文件最近一次被存取或被执行的时间,UNIX 时间戳,对应 POSIX stat.st_atime


number lastModifiedTime


文件最后一次被修改的时间,UNIX 时间戳,对应 POSIX stat.st_mtime

方法


boolean Stats.isDirectory()


判断当前文件是否一个目录


boolean Stats.isFile()


判断当前文件是否一个普通文件



版权声明:本文为JackJia2015原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。