根據后端傳入的圖片二進制流,前端需要展示,如下圖紅框所示:
如何將這段二進制流展示在頁面中呢,首先我們需要了解一下網頁上有些圖片的src或css背景圖片的url后面跟了一大串字符,如下圖:
這是Data URI scheme。
Data URI scheme是在RFC2397中定義的,目的是將一些小的數據,直接嵌入到網頁中,從而不用再從外部文件載入。比如上面那串字符,其實是一張小圖片,將這些字符復制黏貼到火狐的地址欄中並轉到,就能看到它了,一張1X36的白灰png圖片。
在上面的Data URI中,data表示取得數據的協定名稱,image/png 是數據類型名稱,base64 是數據的編碼方法,逗號后面就是這個image/png文件base64編碼后的數據。
目前,Data URI scheme支持的類型有:
data:,文本數據 data:text/plain,文本數據 data:text/html,HTML代碼 data:text/html;base64,base64編碼的HTML代碼 data:text/css,CSS代碼 data:text/css;base64,base64編碼的CSS代碼 data:text/javascript,Javascript代碼 data:text/javascript;base64,base64編碼的Javascript代碼 data:image/gif;base64,base64編碼的gif圖片數據 data:image/png;base64,base64編碼的png圖片數據 data:image/jpeg;base64,base64編碼的jpeg圖片數據 data:image/x-icon;base64,base64編碼的icon圖片數據 注意:SVG的圖片前面加上:data:image/svg+xml;base64,【逗號不能少】
下面展示實際代碼的應用:
//獲取icon列表 async getIcon() { let { data } = await getIcon() for (let item of data) { let icon = "" if (item.type == "svg") { // svg格式類型 icon = "data:image/svg+xml;base64," + item.content } else{ //其他類型 icon = "data:image/png;base64," + item.content } let obj = { type: item.type, name: item.name, icon: icon } this.iconList.push(obj) } }
頁面中展示如下: