文件系統
文件系統是小程序提供的一套以小程序和用戶維度隔離的存儲以及一套相應的管理接口。 通過 wx.getFileSystemManager()可以獲取到全域唯一的文件系統管理器,所有文件系統的管理操作通過 FileSystemManager來調用。
var fs = wx.getFileSystemManager();文件主要分為兩大類:
- 代碼包文件:代碼包文件指的是在項目目錄中添加的文件。
- 本地文件:通過調用接口本地產生,或通過網絡下載下來,存儲到本地的文件
- 本地暫存文件:臨時產生,隨時會被回收的文件運行時最多存儲4GB,結束運行後,如果已使用超過2GB,會以文件為維度按照最近使用時間從遠到近進行清理至少於2GB。
- 本地緩存文件:小程序通過接口把本地暫存文件緩存後產生的文件,不能自定義目錄和檔名跟本地用戶文件共計,小程序(含小遊戲)最多可存儲200MB。
- 本地用戶文件:小程序通過接口把本地暫存文件緩存後產生的文件,允許自定義目錄和檔名跟本地緩存文件共計,小程序(含小遊戲)最多可存儲200MB。
1.代碼包文件
由於代碼包文件大小限制,代碼包文件適用於放置首次加載時需要的文件,對於內容較大或需要動態替換的文件,不推到代碼包中,推薦在小程序啟動之後再用下載接口下載到本地。
1.1訪問代碼包文件
代碼包文件的訪問管道是從項目根目錄開始寫文件路徑,不支持相對路徑的寫法如:/ a/b/c、a/b/c都是合法的,./ a/b/c、../a/b/c則不合法。
1.2修改代碼包文件
代碼包內的文件無法在運行後動態修改或删除,修改代碼包文件需要重新發佈版本。
2.本地文件
本地文件指的是小程序被用戶添加到手機後,會有一塊獨立的檔存儲區域,以用戶維度隔離即同一臺手機,每個用戶不能訪問到其他登入用戶的文件,同一個用戶不同appId之間的文件也不能互相訪問。
本地文件的文件路徑均為以下格式:
{{Protocol Name}}://File PathTIP
其中,協定名在iOS/Android用戶端為'wxfile',在開發者工具上為'http',開發者無需關注這個差异,也不應在代碼中去硬編碼完整文件路徑。
2.1本地暫存文件
本地暫存文件只能通過調用特定接口產生,不能直接寫入內容本地暫存文件產生後,僅在當前生命週期內保證有效,重啓之後不一定可用如果需要保證在下次啟動時無需下載,可通過 FileSystemManager.saveFile() 或 FileSystemManager.copyFile() 接口把本地暫存文件轉換成本地緩存文件或本地用戶文件。
暫存文件的清理策略為:小程序退出後系統會檢查該小程序的暫存文件佔用,若不超過2GB則不進行清理,超過上限則以文件為維度按照最近使用時間從遠到近進行清理同時也會檢查所有小程序的暫存文件佔用,若超過6GB則以小程序為維度進行清理。
囙此,開發者在下載暫存文件時,可先通過 FileSystemManager.access()檢查該文件是否存在,减少重複文件下載,提升用戶體驗
代碼示例:
wx.chooseImage({
success: function (res) {
var tempFilePaths = res.tempFilePaths // Each entry of tempFilePaths is a local temporary file path
})2.2本地緩存文件
本地緩存文件只能通過調用特定接口產生,不能直接寫入內容本地緩存文件產生後,重啓之後仍可用本地緩存文件只能通過 FileSystemManager.saveFile()介面將本地暫存文件保存獲得。
代碼示例:
fs.saveFile({
tempFilePath: "", // Pass a local temporary file path
success(res) {
console.log(res.savedFilePath); // res.savedFilePath is a local cache file path
},
});2.3本地用戶文件
我們提供了一個用戶文件目錄給開發者,開發者對這個目錄有完全自由的讀寫許可權通過wx.env. USER_DATA_PATH可以獲取到這個目錄的路徑。
代碼示例:
// Create a hello.txt file in the local user file directory and write "hello, world" to it
const fs = wx.getFileSystemManager();
fs.writeFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, "hello, world", "utf8");2.4讀寫許可權
| 接口、組件 | 讀 | 寫 |
|---|---|---|
| 代碼包文件 | 有 | 無 |
| 本地暫存文件 | 有 | 無 |
| 本地緩存文件 | 有 | 無 |
| 本地用戶文件 | 有 | 有 |
2.5清理策略
- 本地暫存文件只保證在小程序當前生命週期內,一旦小程序被關閉就可能被清理,即下次冷開機不保證可用。
- 本地緩存文件和本地用戶文件的清理時機跟代碼包一樣,只有在代碼包被清理的時候才會一同被清理。