成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

網(wǎng)頁(yè)中下載文件的相關(guān)總結(jié)

shusen / 3183人閱讀

摘要:對(duì)于通過(guò)去下載文件時(shí)跨域的問題有一個(gè)解決思路是自己寫一個(gè)代理服務(wù)代理服務(wù)負(fù)責(zé)在服務(wù)端下載文件并配置好跨域相關(guān)的信息然后請(qǐng)求走代理服務(wù)進(jìn)行下載。

0. 概述

文件下載是web應(yīng)用中很常見的場(chǎng)景,在瀏覽器中下載文件, 最基本的方式就是——在頁(yè)面內(nèi)隱藏iframe, 然后將文件下載地址加載到iframe中, 從而觸發(fā)瀏覽器的下載行為。 此外, html5引入a標(biāo)簽的download屬性, 也是一種下載方式。


下載

下面針對(duì)下載地址的Response Header、瀏覽器兼容性, 以及一些特殊case, 做一些說(shuō)明。

1. 怎樣的文件url才能觸發(fā)瀏覽器的下載行為?

能觸發(fā)瀏覽器下載的url有兩類:

response header中指定了Content-Dispositionattachment,它表示讓瀏覽器把響應(yīng)體作為附件下載到本地 (一般Content-Disposition還會(huì)指定filename, 下載的文件默認(rèn)就是filename指定的名字)

response header中指定了Content-Typeapplication/octet-stream(無(wú)類型) 或者 application/zip(下載zip包時(shí))以及其它幾個(gè)不常見類型 (其中還有瀏覽器差異),其中 application/octet-stream表示http response為二進(jìn)制流(沒指定明確的type), 需要下載到本地, 由系統(tǒng)決定或者用戶手動(dòng)指定打開方式。

關(guān)于application/octet-stream的情況, 補(bǔ)充幾點(diǎn)

這種response, 由于沒有明確的type, 如果作為文件下載的話, 下載下來(lái)的文件將沒有文件名和拓展名(文件名直接取的url path的最后一坨)

如果不作為文件下載, 比如已知response body是一張圖片, 可以通過(guò)img標(biāo)簽來(lái)顯示圖片

下載下來(lái)的內(nèi)容, 只是缺少文件拓展名而已, 文件內(nèi)容是完整的, 如果知道它實(shí)際的拓展名, 手動(dòng)改了就能通過(guò)系統(tǒng)默認(rèn)的程序打開, 不改拓展名的話也能通過(guò)指定應(yīng)用程序的方式打開

關(guān)于response header的Content-Type, 補(bǔ)充幾點(diǎn)

首先要明確, Content-Type只是HTTP協(xié)議的部分, 不影響response body自身

Content-Type影響的是response的接收方(一般是瀏覽器), 對(duì)于瀏覽器而言, 它影響的是瀏覽器對(duì)響應(yīng)體的處理方式. 比如指定為application/zip, 瀏覽器就會(huì)用pdf閱讀器打開.

Content-Type之于瀏覽器, 就好比文件擴(kuò)展名之于操作系統(tǒng), 影響的默認(rèn)行為, 如果你指定了打開方式, 那么Content-Type就不起作用了. 比如, 你在服務(wù)端對(duì)圖片地址設(shè)置Content-Type為application/zip,但你在瀏覽器使用img標(biāo)簽(相當(dāng)于指定了打開方式)去加載, 照樣能正常加載圖片。

為什么上面說(shuō)的「Content-Type」還有「文件拓展名」對(duì)于文件自身沒有影響?
這里涉及到「文件格式協(xié)議」/「文件頭」等內(nèi)容, 待補(bǔ)充...

2.