轉(zhuǎn)載地址: https://segmentfault.com/a/1190000011789491
網(wǎng)頁上要下載東西帆赢,下載一個(gè)資源(軟件.exe 套硼、 壓縮包.zip 卡儒、 圖片.png 耐版、 本文.txt ),我們通過url打開艾蓝,發(fā)現(xiàn)有的可以下載,有的直接顯示了斗塘,這就有點(diǎn)尷尬了赢织。先說說為什么有的資源就直接顯示了。這是因?yàn)闉g覽器發(fā)現(xiàn)他可以自己打開了馍盟,所以他就覺得他要顯示比如你的 .png .txt .html于置。那如果我們要下載怎么辦?
這種東西呢贞岭,一般就兩個(gè)辦法八毯,一個(gè)前端控制,一個(gè)后端控制瞄桨。
后端控制 新給你一個(gè)url话速,加個(gè)下載頭。瀏覽器一看芯侥,哎呦這個(gè)東西是要下載的泊交,不需要打開,他就直接下載了柱查。這樣的下載需要后端人員配合廓俭,這咔咔咔就改代碼。
前端控制 a標(biāo)簽的Download屬性唉工,加上以后研乒,就是下載資源,這個(gè)好淋硝,想下載什么下載什么雹熬,但是呢错维,這種好用的東西在前端一般都有問題,什么問題橄唬?兼容問題唄赋焕,F(xiàn)F不支持跨域下載,非跨域下是可以下載的-測(cè)試地址仰楚÷∨校跨域情況,chrome里面設(shè)置filename不好使-測(cè)試地址同上僧界。當(dāng)然侨嘀,還有我們要兼容的ie。
舉個(gè)栗子:
//這樣寫成一個(gè)function可以讓我們不用界面上放一個(gè)a標(biāo)簽捂襟,換成js觸發(fā)咬腕。
a = document.createElement('a');
a.download = filename;
a.;
// 觸發(fā)點(diǎn)擊
document.body.appendChild(a);
a.click();
document.body.removeChild(a);