js 實(shí)現(xiàn)下載文件,批量下載

a標(biāo)簽中的 download 屬性是 h5 的標(biāo)準(zhǔn)
MDN 對(duì)于 a 標(biāo)簽中 download 的說(shuō)明:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/a

單個(gè)文件下載

  1. 對(duì)于單個(gè)文件下載,使用 a 標(biāo)簽即可。類似下面代碼:
 // 其中 url 為你文件的路徑,name為給文件指定的新的名字
 <a href="url" download="name">
 // 如果不需要指定新的名字,可以用下面的方式
 <a href="url" download>

注意:

  • 需要下載的文件是 同源文件,否則瀏覽器控制臺(tái)會(huì)報(bào) 警告,類似


    1.png
  1. 非同源文件,不要控制臺(tái)報(bào)警告,可用下面的方式,即指定 a 標(biāo)簽的 target 屬性
     // 瀏覽器會(huì)先打開(kāi)一個(gè)空白標(biāo)簽頁(yè)面,等下載完成會(huì)自動(dòng)關(guān)閉空白標(biāo)簽頁(yè)
     // 測(cè)試了多個(gè)瀏覽器,對(duì)于 IE 瀏覽器,不會(huì)關(guān)閉打開(kāi)的 空白標(biāo)簽頁(yè)
     <a href="url" download="name" target="_blank">
    

批量下載多個(gè)文件

創(chuàng)建一個(gè)隱藏的 <a> 標(biāo)簽,設(shè)置 href 等屬性,用 JavaScript 來(lái)觸發(fā)這個(gè)它的 click 事件,代碼如下;

const files = ['url1', 'url2', 'url3'];
files.forEach(url => {
    const aLabel = document.createElement('a');
    const aEvent = document.createEvent('MouseEvents'); // 創(chuàng)建鼠標(biāo)事件對(duì)象
   
    aEvent.initEvent('click', false, false);
    aLabel.href = url;
    aLabel.download = ''; // 設(shè)置下載文件名,當(dāng)不需要重新命名時(shí),可以賦值為空字符串
    // 同源文件可以不用寫這句,如果非同源文件,請(qǐng)一定加上這句話
    // 否則每次只會(huì)下載其中一個(gè)文件就中斷其余文件的下載了,控制臺(tái)報(bào)和單個(gè)文件中截圖的那個(gè)警告
    // aLabel.target = '_blank';
    aLabel.dispatchEvent(aEvent);
});

注意: 請(qǐng)注意 aLabel.target = '_blank'; 這句上面的注釋

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容