微信小程式 實現網路圖片本地快取
在開發專案的過程中,微信小程式需要實現網路圖片的本地快取。因為圖片大小>1M,所以使用者每次開啟小程式都要重新下載,由於圖片比較大,下載時間比較久,就容易造成不好的使用者體驗。那麼,在小程式裡面具體怎麼實現圖片的快取呢,接下來看具體實現程式碼邏輯。
剛看到這個需求的時候,我的第一反應是通過小程式提供的資料快取api來實現,
wx.setStorageSync(string key, any data)
但是api的限制就是data只能是原生型別,date,或者可以JSON序列化的物件。這樣的話就不可能把image當成檔案來儲存了。那麼,我們怎麼實現把image當成一個檔案來儲存到本地快取呢?接下來,將介紹如何使用小程式的檔案系統來實現圖片的檔案快取。
// 第一步: 既然要快取圖片,那麼我們要先將圖片下載下來。
// wx.downloadFile 必填引數url: 圖片的地址。
//當圖片下載成功以後,會返回給我們一個tempFilePath。臨時的檔案路徑
//那麼問題來了,這個臨時的檔案路徑到底怎麼理解呢?
//本地臨時檔案只能通過呼叫特定介面產生,不能直接寫入內容。本地臨時檔案產生後,
//僅在當前生命週期內有效,重啟之後即不可用。因此,不可把本地臨時檔案路徑儲存起來下次使用
//上面的是微信小程式 文件對臨時的檔案路徑的解釋。
//所以到這一步, 這個臨時的檔案路徑不滿足我們的需求。那麼接下來我們怎麼利用這個臨時檔案路徑實現本地快取呢?
wx.downloadFile({
url: 'xxxxxxx',
success: function(res) {
if (res.statusCode === 200) {
console.log('圖片下載成功' + res.tempFilePath)
// 第二步: 使用小程式的檔案系統,通過小程式的api獲取到全域性唯一的檔案管理器
const fs = wx.getFileSystemManager()
// fs為全域性唯一的檔案管理器。那麼檔案管理器的作用是什麼,我們可以用來做什麼呢?
// 檔案管理器的作用之一就是可以根據臨時檔案路徑,通過saveFile把檔案儲存到本地快取.
fs.saveFile({
tempFilePath: res.tempFilePath, // 傳入一個臨時檔案路徑
success(res) {
console.log('圖片快取成功', res.savedFilePath) // res.savedFilePath 為一個本地快取檔案路徑
// 此時圖片本地快取已經完成,res.savedFilePath為本地儲存的路徑。
//小程式的本地檔案路徑標準: {{協議名}}://檔案路徑
//協議名在 iOS/Android 客戶端為 "wxfile",在開發者工具上為 "http",
//開發者無需關注這個差異,也不應在程式碼中去硬編碼完整檔案路徑。
//好了,到此為止,我們已經把圖片快取到本地了,而且我們也得到了本地快取的路徑。
// 那麼我們把本地快取的路徑,通過小程式的資料快取服務儲存下來。
// 下次開啟小程式 首先去快取中檢查是否存在本地檔案的快取路徑
// 如果有,直接image src賦值本地快取路徑。
//如果沒有,則是第一次下載圖片,或者使用者手動清理快取造成的。
wx.setStorageSync('image_cache', res.savedFilePath)
}
})
}else {
console.log('響應失敗', res.statusCode)
}
}
下面程式碼是使用快取給Image賦值的簡短邏輯
/// 重新啟動小程式,去快取中獲取圖片的快取地址。 然後給Imagesrc賦值
const path = wx.getStorageSync('image_cache')
if (path != null) {
console.log('path====', path)
this.setData({
image_filepath: path
})
}else {
console.log('去快取圖片')
}
}
<image src="{{image_filepath}}"></image>
接下來用一張圖片來解釋一下整體快取思路。
相關文章
- SDWebImage實現圖片展示、快取、清除快取Web快取
- 微信小程式開發之從相簿獲取圖片 使用相機拍照 本地圖片上傳微信小程式地圖
- 微信小程式--實現圖片懶載入(lazyload)微信小程式
- iOS儲存網路圖片和讀取本地沙盒圖片iOS
- 網路爬蟲---從千圖網爬取圖片到本地爬蟲
- 微信小程式--通過canvas生成圖片並儲存到本地微信小程式Canvas
- 在微信小程式裡實現圖片預載入元件微信小程式元件
- 微信小程式朋友圈分享圖片生成方案實現微信小程式
- 使用taro+canvas實現微信小程式的圖片分享功能Canvas微信小程式
- Android使用LruCache、DiskLruCache實現圖片快取+圖片瀑布流Android快取
- 微信小程式圖片使用示例微信小程式
- 微信小程式 圖片上傳微信小程式
- 微信小程式之資料快取微信小程式快取
- Android 之 遠端圖片獲取和本地快取Android快取
- 微信小程式(JAVAScript)實現餅圖微信小程式JavaScript
- 微信小程式開發:上傳網路圖片到阿里雲oss微信小程式阿里
- 快取圖片快取
- 圖片快取快取
- 微信小程式 + 騰訊地圖SDK 實現路線規劃微信小程式地圖
- 深入解析微信小程式頁面中實現的儲存圖片(附程式碼)微信小程式
- Glide 4.0.0 下之載入本地快取的圖片IDE快取
- 利用localstorage實現本地訊息快取快取
- 微信小程式裁剪圖片成圓形微信小程式
- offscreenCanvas+worker+IndexedDB實現無感大量圖片快取CanvasIndex快取
- 微信小程式開發-canves 圖片壓縮 獲取base64微信小程式
- 小程式實現長按刪除圖片
- Swift 開屏廣告的實現 (支援本地與網路的圖片,動態圖,視訊)Swift
- 獲取本地圖片/視訊地圖
- 微信小程式(canvas)畫圖儲存到本地相簿(wepy)微信小程式Canvas
- 用createObjectURL實現本地圖片預覽Object地圖
- Android清除本地快取資料的程式碼實現方案Android快取
- Retrofit和OkHttp實現 Android網路快取HTTPAndroid快取
- 獲取網路圖片的大小
- 服務端使用 nodejs 獲取帶參微信小程式碼圖片服務端NodeJS微信小程式
- 微信小程式之裁剪圖片成圓形微信小程式
- 微信小程式上傳圖片至七牛微信小程式
- 小程式–儲存圖片到相簿功能實現
- 微信小程式變現駛入快車道微信小程式