【JavaScript】WEB純JS前端實(shí)現(xiàn)文件下載,批量下載
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
1.單個(gè)下載1.1 使用 location.hrefwindow.location.href = url; 1.2 使用 window.openwindow.open("http://barretlee.com/test.rar") // 多個(gè)文件下載時(shí)禁止打開新窗口 window.open(url, true) 1.3 使用 a 標(biāo)簽方式一: <a href="http://barretlee.com/test.rar" download="test.rar" >下載</a> 方式二: const download = (filename, url) => { let a = document.createElement('a') a.style = 'display: none' // 創(chuàng)建一個(gè)隱藏的a標(biāo)簽 a.download = filename a.href = url document.body.appendChild(a) a.click() // 觸發(fā)a標(biāo)簽的click事件 document.body.removeChild(a) } 1.4使用Blob實(shí)現(xiàn)(可能有空白或亂碼問題)export function download (filename, url) { let fileName = `${filename}.jpg` let myBlob = new Blob([url], { type: 'image/jpeg' }) let link = document.createElement('a') link.href = URL.createObjectURL(myBlob) link.download = fileName link.click() link.remove() URL.revokeObjectURL(link.href) } 2.支持圖片下載export function download (filename, url) { let image = new Image() // 解決跨域 Canvas 污染問題 image.setAttribute('crossOrigin', 'anonymous') image.onload = function () { let canvas = document.createElement('canvas') canvas.width = image.width canvas.height = image.height let context = canvas.getContext('2d') context.drawImage(image, 0, 0, image.width, image.height) let url = canvas.toDataURL('image/png') // 得到圖片的base64編碼數(shù)據(jù) let a = document.createElement('a') // 生成一個(gè)a元素 let event = new MouseEvent('click') // 創(chuàng)建一個(gè)單擊事件 a.download = filename || '圖片' // 設(shè)置圖片名稱 a.href = url // 將生成的URL設(shè)置為a.href屬性 a.dispatchEvent(event) // 觸發(fā)a的單擊事件 } image.src = url } 3.支持各類型下載,批量下載// 單個(gè)下載各類型文件 downloadFile (row) { this.downloadBatch(row.filePath, (obj) => { let a = document.createElement('a') let url = URL.createObjectURL(obj) a.href = url a.download = row.fileName a.click() }) }, // 發(fā)送請求 downloadBatch (file, callback) { let request = new XMLHttpRequest() request.responseType = 'blob' request.open('GET', file) request.addEventListener('load', function () { callback(request.response) }) request.send() }, // 批量下載 downloadAll () { for (let i = 0; i < fileList.length; i++) { // 調(diào)用單個(gè)下載方法 this.downloadFile(fileList[i]) } } 該文章在 2023/8/24 21:53:53 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |