前端下载文件流(可暂停、取消、查看进度)

不想上班第N天 2024-08-12 16:33:01 阅读 52

<code> <el-button type="primary" icon="Download" plain @click="handleDownload('batch')">下载</el-button>code>

1、a标签下载(没有进度条,接口走完前端才有反应,下载大文件时用户体验不好,适用下载小文件)

// 下载

const handleDownload = async row => { -- -->

if (selectedData.value && selectedData.value.length != 0) {

selectedData.value.forEach(item=>{

downloadFileAuthentication(item.propertyId).then(res => {

downloadFileHref(item.propertyId).then(res => {

const blob = new Blob([res], { type: 'application/zip' })

const link = document.createElement('a')//创建a标签

link.download = item.propertyName//a标签添加属性

link.style.display = 'none'

link.href = URL.createObjectURL(blob)

document.body.appendChild(link)

link.click()//执行下载

URL.revokeObjectURL(link.href) //释放url

document.body.removeChild(link)//释放标签

})

})

})

} else {

ElMessage.warning('请先选择操作数据');

}

}

2、 window.location.href下载(有进度条,可取消、暂停。缺点:一次只能下载一条,不支持批量下载)(这里后端get请求方式传参)

const handleDownload = async row => {

const url = `/ca/download/downloadFile?propertyId=${ row.propertyId}`;

downloadFileAuthentication(row.propertyId).then(res => {

if (res.code == 200) {

window.location.href = ` ${ downLoadUrl + url}&token=${ getToken()}`

}

})

};

3、iframe下载(有进度条,可取消、暂停,支持同时下载多个)

const handleDownload = async row => {

if (selectedData.value && selectedData.value.length != 0) {

selectedData.value.forEach(item=>{

downloadFileAuthentication(item.propertyId).then(res => {

downloadFileHref(item.propertyId).then(res => {

var url = `/ca/download/downloadFile?propertyId=${ item.propertyId}`; // 文件地址

var iframe = document.createElement('iframe')

iframe.src = ` ${ downLoadUrl + url}&token=${ getToken()}`

iframe.style.display = 'none'

iframe.onload = function () {

document.body.removeAttribute(iframe)

}

document.body.appendChild(iframe)

})

})

})

} else {

ElMessage.warning('请先选择操作数据');

}

}

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。