微信小程序 實現(xiàn)網(wǎng)絡(luò)圖片本地緩存

在開發(fā)項目的過程中肮蛹,微信小程序需要實現(xiàn)網(wǎng)絡(luò)圖片的本地緩存。因為圖片大小>1M,所以用戶每次打開小程序都要重新下載螺垢,由于圖片比較大堤结,下載時間比較久,就容易造成不好的用戶體驗饼问。那么,在小程序里面具體怎么實現(xiàn)圖片的緩存呢,接下來看具體實現(xiàn)代碼邏輯配猫。
剛看到這個需求的時候,我的第一反應(yīng)是通過小程序提供的數(shù)據(jù)緩存api來實現(xiàn)杏死,

wx.setStorageSync(string key, any data)

但是api的限制就是data只能是原生類型泵肄,date,或者可以JSON序列化的對象淑翼。這樣的話就不可能把image當(dāng)成文件來存儲了腐巢。那么,我們怎么實現(xiàn)把image當(dāng)成一個文件來存儲到本地緩存呢?接下來玄括,將介紹如何使用小程序的文件系統(tǒng)來實現(xiàn)圖片的文件緩存冯丙。

// 第一步: 既然要緩存圖片,那么我們要先將圖片下載下來。
// wx.downloadFile 必填參數(shù)url: 圖片的地址胃惜。
//當(dāng)圖片下載成功以后泞莉,會返回給我們一個tempFilePath。臨時的文件路徑
//那么問題來了船殉,這個臨時的文件路徑到底怎么理解呢鲫趁?
//本地臨時文件只能通過調(diào)用特定接口產(chǎn)生,不能直接寫入內(nèi)容利虫。本地臨時文件產(chǎn)生后挨厚,
//僅在當(dāng)前生命周期內(nèi)有效,重啟之后即不可用糠惫。因此疫剃,不可把本地臨時文件路徑存儲起來下次使用
//上面的是微信小程序 文檔對臨時的文件路徑的解釋。
//所以到這一步硼讽, 這個臨時的文件路徑不滿足我們的需求巢价。那么接下來我們怎么利用這個臨時文件路徑實現(xiàn)本地緩存呢?
wx.downloadFile({
      url: 'xxxxxxx',
      success: function(res) {
        if (res.statusCode === 200) {
          console.log('圖片下載成功' + res.tempFilePath)
          // 第二步: 使用小程序的文件系統(tǒng)固阁,通過小程序的api獲取到全局唯一的文件管理器
          const fs = wx.getFileSystemManager()
          //  fs為全局唯一的文件管理器蹄溉。那么文件管理器的作用是什么,我們可以用來做什么呢您炉?
         //   文件管理器的作用之一就是可以根據(jù)臨時文件路徑柒爵,通過saveFile把文件保存到本地緩存.
          fs.saveFile({
            tempFilePath: res.tempFilePath, // 傳入一個臨時文件路徑
            success(res) {
              console.log('圖片緩存成功', res.savedFilePath) // res.savedFilePath 為一個本地緩存文件路徑  
              // 此時圖片本地緩存已經(jīng)完成,res.savedFilePath為本地存儲的路徑赚爵。
              //小程序的本地文件路徑標(biāo)準(zhǔn): {{協(xié)議名}}://文件路徑
              //協(xié)議名在 iOS/Android 客戶端為 "wxfile"棉胀,在開發(fā)者工具上為 "http",
              //開發(fā)者無需關(guān)注這個差異冀膝,也不應(yīng)在代碼中去硬編碼完整文件路徑唁奢。
              //好了,到此為止窝剖,我們已經(jīng)把圖片緩存到本地了麻掸,而且我們也得到了本地緩存的路徑。
              // 那么我們把本地緩存的路徑赐纱,通過小程序的數(shù)據(jù)緩存服務(wù)保存下來脊奋。
              // 下次打開小程序 首先去緩存中檢查是否存在本地文件的緩存路徑
              // 如果有,直接image src賦值本地緩存路徑疙描。
              //如果沒有诚隙,則是第一次下載圖片,或者用戶手動清理緩存造成的起胰。
              wx.setStorageSync('image_cache', res.savedFilePath)
            }
          })
        }else {
          console.log('響應(yīng)失敗', 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>

接下來用一張圖片來解釋一下整體緩存思路。

wechat_cache.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末地消,一起剝皮案震驚了整個濱河市炉峰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脉执,老刑警劉巖讲冠,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異适瓦,居然都是意外死亡,警方通過查閱死者的電腦和手機谱仪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門玻熙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疯攒,你說我怎么就攤上這事嗦随。” “怎么了敬尺?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵枚尼,是天一觀的道長。 經(jīng)常有香客問我砂吞,道長署恍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任蜻直,我火速辦了婚禮盯质,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘概而。我一直安慰自己呼巷,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布赎瑰。 她就那樣靜靜地躺著王悍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪餐曼。 梳的紋絲不亂的頭發(fā)上压储,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音源譬,去河邊找鬼渠脉。 笑死,一個胖子當(dāng)著我的面吹牛瓶佳,可吹牛的內(nèi)容都是我干的芋膘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼为朋!你這毒婦竟也來了臂拓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤习寸,失蹤者是張志新(化名)和其女友劉穎胶惰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霞溪,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡孵滞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸯匹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坊饶。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖殴蓬,靈堂內(nèi)的尸體忽然破棺而出匿级,到底是詐尸還是另有隱情,我是刑警寧澤染厅,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布痘绎,位于F島的核電站,受9級特大地震影響肖粮,放射性物質(zhì)發(fā)生泄漏孤页。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一涩馆、第九天 我趴在偏房一處隱蔽的房頂上張望散庶。 院中可真熱鬧,春花似錦凌净、人聲如沸悲龟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽须教。三九已至,卻和暖如春斩芭,著一層夾襖步出監(jiān)牢的瞬間轻腺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工划乖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贬养,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓琴庵,卻偏偏與公主長得像误算,于是被迫代替她去往敵國和親仰美。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360