欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長(zhǎng)資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          javascript 怎么實(shí)現(xiàn)下載功能

          javascript實(shí)現(xiàn)下載功能的方法:1、通過(guò)a標(biāo)簽實(shí)現(xiàn)下載;2、通過(guò)“window.open”方法實(shí)現(xiàn)下載;3、通過(guò)“l(fā)ocation.href”方法實(shí)現(xiàn)下載;4、通過(guò)文件流轉(zhuǎn)blob對(duì)象實(shí)現(xiàn)下載功能。

          javascript 怎么實(shí)現(xiàn)下載功能

          本教程操作環(huán)境:Windows10系統(tǒng)、javascript1.8.5版本、Dell G3電腦。

          javascript 怎么實(shí)現(xiàn)下載功能?

          js實(shí)現(xiàn)文件下載功能

          一、a標(biāo)簽下載

          <body> <button onClick="download()">a標(biāo)簽下載</button> <script> function download(url = 'http:www.xxx.com/download?name=file.pdf', fileName = '未知文件') {       const a = document.createElement('a');       a.style.display = 'none';       a.setAttribute('target', '_blank');       /*        * download的屬性是HTML5新增的屬性        * href屬性的地址必須是非跨域的地址,如果引用的是第三方的網(wǎng)站或者說(shuō)是前后端分離的項(xiàng)目(調(diào)用后臺(tái)的接口),這時(shí)download就會(huì)不起作用。        * 此時(shí),如果是下載瀏覽器無(wú)法解析的文件,例如.exe,.xlsx..那么瀏覽器會(huì)自動(dòng)下載,但是如果使用瀏覽器可以解析的文件,比如.txt,.png,.pdf....瀏覽器就會(huì)采取預(yù)覽模式        * 所以,對(duì)于.txt,.png,.pdf等的預(yù)覽功能我們就可以直接不設(shè)置download屬性(前提是后端響應(yīng)頭的Content-Type: application/octet-stream,如果為application/pdf瀏覽器則會(huì)判斷文件為 pdf ,自動(dòng)執(zhí)行預(yù)覽的策略)        */       fileName && a.setAttribute('download', fileName);       a.href = url;       document.body.appendChild(a);       a.click();       document.body.removeChild(a);     } </script> </body>
          登錄后復(fù)制

          優(yōu)點(diǎn):

          • 可以直接下載txt、png、pdf、exe、xlsx等類(lèi)型文件

          缺點(diǎn):

          • a標(biāo)簽只能做get請(qǐng)求,所以u(píng)rl有長(zhǎng)度限制

          • 無(wú)法獲取下載進(jìn)度

          • 跨域限制

          • 無(wú)法在header中攜帶token做鑒權(quán)操作

          • 無(wú)法判斷接口是否成功

          • IE兼容問(wèn)題

          二、window.open下載

          <body>   <button onclick="download('http://www.xxx.com/download?name=file.pdf')">window.open下載</button>   <script>     function download(url) {       window.open(url, '_self');       /**        *  _blank:在新窗口顯示目標(biāo)網(wǎng)頁(yè)        *  _self:在當(dāng)前窗口顯示目標(biāo)網(wǎng)頁(yè)        *  _top:框架網(wǎng)頁(yè)中在上部窗口中顯示目標(biāo)網(wǎng)頁(yè)       /**     }   </script> </body>
          登錄后復(fù)制

          優(yōu)點(diǎn):

          • 簡(jiǎn)單方便

          缺點(diǎn):

          • 會(huì)出現(xiàn)URL長(zhǎng)度限制問(wèn)題

          • 需要注意url編碼問(wèn)題

          • 無(wú)法獲取下載進(jìn)度

          • 無(wú)法在header中攜帶token做鑒權(quán)操作

          • 無(wú)法判斷接口是否成功

          • 無(wú)法直接下載瀏覽器可直接預(yù)覽的文件類(lèi)型(txt、png、pdf會(huì)直接預(yù)覽)

          三、location.href 下載

          <body>   <button onclick="download('http://www.xxx.com/download?name=file.pdf')">location.href下載   </button>   <script>     function download(url) {       window.location.href = url;     }   </script> </body>
          登錄后復(fù)制

          優(yōu)點(diǎn)

          • 簡(jiǎn)單方便直接

          • 可以下載大文件(G以上)

          缺點(diǎn)

          • 會(huì)出現(xiàn)URL長(zhǎng)度限制問(wèn)題

          • 需要注意url編碼問(wèn)題

          • 無(wú)法獲取下載進(jìn)度

          • 無(wú)法在header中攜帶token做鑒權(quán)操作

          • 無(wú)法直接下載瀏覽器可直接預(yù)覽的文件類(lèi)型(txt、png、pdf會(huì)直接預(yù)覽)

          • 無(wú)法判斷接口是否返回成功

          三、文件流轉(zhuǎn)blob對(duì)象下載

           <button onclick="download()">文件流轉(zhuǎn)blob對(duì)象下載</button>  <script>  download() {  axios({  url: 'http://www.xxx.com/download',  method: 'get',  responseType: 'blob',  }).then(res => {  const fileName = res.headers.content-disposition.split(';')[1].split('filename=')[1];  const filestream = res.data;  // 返回的文件流  // {type: 'application/vnd.ms-excel'}指定對(duì)應(yīng)文件類(lèi)型為.XLS (.XLS的縮寫(xiě)就為application/vnd.ms-excel)  const blob = new Blob([filestream], {type: 'application/vnd.ms-excel'});  const a = document.createElement('a');  const href = window.URL.createObjectURL(blob); // 創(chuàng)建下載連接     a.href = href;     a.download = decodeURL(fileName );     document.body.appendChild(a);         a.click();         document.body.removeChild(a); // 下載完移除元素         window.URL.revokeObjectURL(href); // 釋放掉blob對(duì)象  })  }  </script>
          登錄后復(fù)制

          優(yōu)點(diǎn):

          • 可以下載txt、png、pdf等類(lèi)型文件

          • 可以在header中攜帶token做鑒權(quán)操作

          • 可以獲取文件下載進(jìn)度

          • 可以判斷接口是否返回成功

          缺點(diǎn):

          • 兼容性問(wèn)題,IE10以下不可用,注意Safari瀏覽器,官網(wǎng)給出 Safari has a serious issue with blobs that are of the type application/octet-stream

          • 將后端返回的文件流全部獲取后才會(huì)下載

          推薦學(xué)習(xí):《JavaScript視頻教程》

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)