么去控制瀏覽器對(duì)資源文件的處理行為

2018-6-26    seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里

通常當(dāng)用戶打開一個(gè)資源的url,如果瀏覽器支持這個(gè)格式的文件的情況下,瀏覽器會(huì)嘗試去再頁(yè)面里展示它而不是直接下載。例如一張圖片(jpg, png, gif等),幾乎所有瀏覽器都會(huì)去將圖片在瀏覽器里面展示。


對(duì)于壓縮格式的文件(zip, tar, gzip等)瀏覽器總是會(huì)直接去下載它們,另外一些格式的文件,根據(jù)瀏覽器的不同也會(huì)有差異的處理方法,例如Microsoft Word文件(doc, docx)在ie瀏覽器下通常會(huì)在瀏覽器中展示,但是其他瀏覽器幾乎都會(huì)直接下載它,同樣的對(duì)于PDF文件chrome有自己的pdf 轉(zhuǎn)換器它會(huì)嘗試去在瀏覽器上展示該文件。

強(qiáng)制下載文件

對(duì)于瀏覽器這種行為,一般情況下是可以接受的,因?yàn)橛脩艨梢栽跒g覽器顯示文件后將文件保存到電腦中,但是一些情況下用戶可能希望文件直接被下載而不是在瀏覽器中被打開,比如有時(shí)候用戶想去下載一個(gè)歌曲,但是瀏覽器可能回去播放該音頻。那么怎么讓瀏覽器強(qiáng)制去下載文件要怎么做呢

a標(biāo)簽的download屬性

html5中 a 標(biāo)簽新增了 download 屬性,該屬性指示瀏覽器下載url的內(nèi)容而不是導(dǎo)航到url,因此如果配置了此屬性用戶會(huì)直接下載url的內(nèi)容。作為開發(fā)如果想直接觸發(fā)該事件我們可以直接用代碼模擬a標(biāo)簽和點(diǎn)擊事件


    
  1. const link = document.createElement('a');
  2. link.addEventListener('click', function() {
  3. link.download = xxx;
  4. link.href = xxx;
  5. });
  6. const e = document.createEvent('MouseEvents');
  7. e.initEvent('click', false, false);
  8. link.dispatchEvent(e);
  • download屬性只在同域時(shí)候有效,當(dāng)跨域請(qǐng)求時(shí)候該屬性將會(huì)被忽略。
  • 當(dāng)前并非所以瀏覽器都支持該屬性,需要瀏覽器考慮兼容性。

改變資源格式

瀏覽器會(huì)根據(jù)資源類型去判斷是否支持,如果支持時(shí)會(huì)嘗試去在頁(yè)面上展示該資源。瀏覽器判斷資源類型是根據(jù)返回頭Content-Type的值,因此一方面我們?cè)诜?wù)端可以設(shè)置返回頭字段為文件流'Content-Type': 'application/octet-stream',或者根據(jù)一些具體資源直接壓縮后傳輸,瀏覽器不能分析zip之類的壓縮文件所以會(huì)直接去下載它們。

配置Content-Disposition

在HTTP場(chǎng)景中,Content-Disposition 消息頭指示回復(fù)的內(nèi)容該以何種形式展示,是以內(nèi)聯(lián)的形式(即網(wǎng)頁(yè)或者頁(yè)面的一部分),還是以附件的形式下載并保存到本地。

  • inline 默認(rèn)參數(shù)表示消息體會(huì)以頁(yè)面的一部分或者整個(gè)頁(yè)面的形式展示。
  • attachment 消息體應(yīng)該被下載到本地,將參數(shù)filename的值預(yù)填為下載后的文件名

因此當(dāng)我們希望該資源被直接下載時(shí)候,我們可以設(shè)置返回頭Content-Disposition的值為attachment。


    
  1. //example
  2. Content-Disposition: attachment; filename="fname.ext"

這里設(shè)置名稱時(shí)候,要注意下filename的編碼格式。

用戶自己在瀏覽器設(shè)置

瀏覽器既然定義了該行為,根據(jù)瀏覽器的不同用戶可能在設(shè)置頁(yè)面去配置某些格式的文件是否希望瀏覽器去展示該文件。一些有爭(zhēng)議的情況下,你也可以提示用戶自己根據(jù)需求去設(shè)置這些參數(shù)。


藍(lán)藍(lán)設(shè)計(jì)sillybuy.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)


分享本文至:

日歷

鏈接

個(gè)人資料

存檔