文件系统是小程序提供的一套以小程序和用户维度隔离的存储以及一套相应的管理接口。通过 wx.getFileSystemManager() 可以获取到全局唯一的文件系统管理器,所有文件系统的管理操作通过 FileSystemManager 来调用。
const fs = wx.getFileSystemManager()
文件主要分为两大类:
其中本地文件又分为三种:
普通小程序最多可存储 10MB
,游戏类目的小程序最多可存储 50MB。普通小程序最多可存储 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')
保存文件到本地。
注意
示例代码
选择照片保存文件到本地
wx.chooseImage({
success(res) {
const tempFilePaths = res.tempFilePaths
wx.saveFile({
tempFilePath: tempFilePaths[0],
success(res) {
const savedFilePath = res.savedFilePath
}
})
}
})
示例代码
获取本地文件的文件信息并删除你要删的文件
wx.getSavedFileList({
success(res) {
if (res.fileList.length > 0) {
wx.removeSavedFile({
filePath: res.fileList[0].filePath,
complete(res) {
console.log(res)
}
})
}
}
})
示例代码
下载文件并文档打开
wx.downloadFile({
// 示例 url,并非真实存在
url: 'http://example.com/somefile.pdf',
success(res) {
const filePath = res.tempFilePath
wx.openDocument({
filePath,
success(res) {
console.log('打开文档成功')
}
})
}
})
获取该小程序下已保存的本地缓存文件列表
参数Object object
示例代码
获取该小程序下已保存的本地缓存文件列表
wx.getSavedFileList({
success(res) {
console.log(res.fileList)
}
})
获取本地文件的文件信息。此接口只能用于获取已保存到本地的文件,若需要获取临时文件信息,请使用 wx.getFileInfo() 接口。
示例代码
获取本地文件的文件信息。
wx.getSavedFileList({
success(res) {
console.log(res.fileList)
}
})
示例代码
wx.getFileInfo({
success(res) {
console.log(res.size)
console.log(res.digest)
}
})
获取全局唯一的文件管理器
返回值
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)
写文件
描述文件状态的对象
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()
判断当前文件是否一个普通文件