1. 程式人生 > 其它 >前端展示圖片和下載檔案的幾種形式

前端展示圖片和下載檔案的幾種形式

一、展示圖片

1.img標籤指向圖片地址
<img border="0" src="www.xx.com/aa/bb.png" alt="picture" width="160" height="100">

拓展:如果是一個img標籤,通過切換src來展示不同的圖片時,會發現瀏覽器有快取,會重複使用第一次載入的圖片。這時候可以在圖片地址後加上 '?<%='+Math.random()+'%>'來保證每次都更新圖片。或者說,給img標籤加個:key="imgSrc"(待驗證);

2.img標籤指向base64流

<img src="data:image/png;base64,一長串base64字串"> //字首data:image/圖片型別;base64,是必填的。

關於base64圖片流,有幾點說明:

base64加密,大小增長1/3左右。
base64流顯示圖片,能夠減少一個圖片的 HTTP 請求,適合小圖片。
base64流顯示圖片,大圖片渲染解析得比較慢,不適合大圖片。
base64流顯示圖片,IE 8 以下不支援 data url,IE 8 開始支援 data url,卻有大小限制,32k(未測試)。

3.二進位制圖片展示

①設定responseType = 'blob'

②利用URL.createObjectURL來生成DOMString,然後將這個dom元素append到要放的div下面

二、下載檔案

1.url下載,直接獲取下載檔案的地址,然後

window.location.href = url; 

2.二進位制流檔案下載

let data = resp.data;
let url = window.URL.createObjectURL(new Blob([data]))
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', 'excel.xlsx')
document.body.appendChild(link)
link.click()
document.body.removeChild(link)

拓展:

如果二進位制流這樣還下載不了,可能是responseType的問題,把responseType改為'arraybuffer'試試