站長資訊網
        最全最豐富的資訊網站

        javascript 怎么實現下載功能

        javascript實現下載功能的方法:1、通過a標簽實現下載;2、通過“window.open”方法實現下載;3、通過“location.href”方法實現下載;4、通過文件流轉blob對象實現下載功能。

        javascript 怎么實現下載功能

        本教程操作環境:Windows10系統、javascript1.8.5版本、Dell G3電腦。

        javascript 怎么實現下載功能?

        js實現文件下載功能

        一、a標簽下載

        <body> <button onClick="download()">a標簽下載</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屬性的地址必須是非跨域的地址,如果引用的是第三方的網站或者說是前后端分離的項目(調用后臺的接口),這時download就會不起作用。        * 此時,如果是下載瀏覽器無法解析的文件,例如.exe,.xlsx..那么瀏覽器會自動下載,但是如果使用瀏覽器可以解析的文件,比如.txt,.png,.pdf....瀏覽器就會采取預覽模式        * 所以,對于.txt,.png,.pdf等的預覽功能我們就可以直接不設置download屬性(前提是后端響應頭的Content-Type: application/octet-stream,如果為application/pdf瀏覽器則會判斷文件為 pdf ,自動執行預覽的策略)        */       fileName && a.setAttribute('download', fileName);       a.href = url;       document.body.appendChild(a);       a.click();       document.body.removeChild(a);     } </script> </body>
        登錄后復制

        優點:

        • 可以直接下載txt、png、pdf、exe、xlsx等類型文件

        缺點:

        • a標簽只能做get請求,所以url有長度限制

        • 無法獲取下載進度

        • 跨域限制

        • 無法在header中攜帶token做鑒權操作

        • 無法判斷接口是否成功

        • IE兼容問題

        二、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:在新窗口顯示目標網頁        *  _self:在當前窗口顯示目標網頁        *  _top:框架網頁中在上部窗口中顯示目標網頁       /**     }   </script> </body>
        登錄后復制

        優點:

        • 簡單方便

        缺點:

        • 會出現URL長度限制問題

        • 需要注意url編碼問題

        • 無法獲取下載進度

        • 無法在header中攜帶token做鑒權操作

        • 無法判斷接口是否成功

        • 無法直接下載瀏覽器可直接預覽的文件類型(txt、png、pdf會直接預覽)

        三、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>
        登錄后復制

        優點

        • 簡單方便直接

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

        缺點

        • 會出現URL長度限制問題

        • 需要注意url編碼問題

        • 無法獲取下載進度

        • 無法在header中攜帶token做鑒權操作

        • 無法直接下載瀏覽器可直接預覽的文件類型(txt、png、pdf會直接預覽)

        • 無法判斷接口是否返回成功

        三、文件流轉blob對象下載

         <button onclick="download()">文件流轉blob對象下載</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'}指定對應文件類型為.XLS (.XLS的縮寫就為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); // 創建下載連接     a.href = href;     a.download = decodeURL(fileName );     document.body.appendChild(a);         a.click();         document.body.removeChild(a); // 下載完移除元素         window.URL.revokeObjectURL(href); // 釋放掉blob對象  })  }  </script>
        登錄后復制

        優點:

        • 可以下載txt、png、pdf等類型文件

        • 可以在header中攜帶token做鑒權操作

        • 可以獲取文件下載進度

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

        缺點:

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

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

        推薦學習:《JavaScript視頻教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 人妻精品久久久久中文字幕69| 国产成人精品免费视频大全麻豆| 亚洲AV永久无码精品| 国产精品99久久久久久人| 久久久久九国产精品| 国产女人精品视频国产灰线| 久久久精品国产亚洲成人满18免费网站| 99久久精品费精品国产一区二区| 亚洲A∨精品一区二区三区| 97久视频精品视频在线老司机| 久久精品九九亚洲精品| 欧美日韩国产精品自在自线| 91热成人精品国产免费| 国产成人精品日本亚洲11| 四虎国产精品永久在线| 无码精品第一页| 精品一区二区三区免费观看 | 99久久99这里只有免费的精品| 正在播放国产精品每日更新| 久久精品无码一区二区三区日韩| 亚洲日本精品一区二区| 精品乱人伦一区二区三区| 国产精品国产精品国产专区不卡 | 中文精品久久久久国产网址| 久久精品国产第一区二区三区 | 2022国产精品最新在线| 欧美精品一区二区三区视频| 欧美亚洲国产成人精品| 色偷偷888欧美精品久久久| 国语自产拍精品香蕉在线播放| 99香蕉国产精品偷在线观看| 国产精品成人久久久久久久| 久久精品九九亚洲精品天堂| 国产亚洲精品国产| 国产精品成人在线| 国产精品亚洲片夜色在线| 久久99久久99小草精品免视看| 久久国产精品-国产精品| 欧美精品免费观看二区| 亚洲精品在线观看视频| 99久久精品这里只有精品|