多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ### 1. 图片下载 ~~~ commonDownload(url, name) { axios.get(url, { responseType: 'blob' }).then( res => { let fileName = null if (res.data.type === 'image/jpeg') { fileName = `${name}.jpg` } if (res.status === 200) { if (typeof window.chrome !== 'undefined') { // Chrome const link = document.createElement('a') link.href = window.URL.createObjectURL(res.data) link.download = fileName link.click() } else if (typeof window.navigator.msSaveBlob !== 'undefined') { // IE const blob = new Blob([res.data], { type: 'application/force-download' }) window.navigator.msSaveBlob(blob, fileName) } else { // Firefox const file = new File([res.data], fileName, { type: 'application/force-download' }) window.open(URL.createObjectURL(file)) } } }, error => { console.error('error', error) } ) } ~~~ ### 2. 一般文件下载(含批量下载) #### 2.1 `iframe`下载(不推荐,参照[`iframe`的优缺点](https://blog.csdn.net/baxiadsy_csdn/article/details/86245809)) **当没有选择时再用该方案** > 该方案支持批量下载,但每个下载都会新增一个`iframe` `dom`元素 ~~~ commonDownloadFunction(url) { const iframe = document.createElement('iframe') iframe.src = url iframe.style.display = 'none' document.body.appendChild(iframe) setTimeout(() => { iframe.remove() }, 1000 * 60) } ~~~ #### 2.2 `widow.location.assign`下载 > 适合于单文件下载,批量下载可能会只下载一个文件 > 不支持文件名修改,文件名由后台提供 ~~~ commonDownloadFunction(url) { window.location.assign(url) } ~~~ #### 2.3`a`标签下载(最佳选择) 方法1 > `download`属性指明当前下载文件的文件名 > 这种方法亦只适合于单文件下载,批量下载可能会只下载一个文件 ~~~ commonDownload(url, name) { const link = document.createElement('a') link.href = url link.download = name link.click() } ~~~ 方法2 >[warning] 设置`responseType`为`blob`,请求得到一个二进制数据流,通过`a`标签直接放入本地 > 优点: 此方法支持批量下载,且可知当前下载文件是否存在 > 缺点: 需要给文件后缀名以告诉当前下载文件的保存类型(后缀名最好由后端提供) eg: (本例中将后缀名写死了,实际场景中一般不会这样) ~~~ async commonDownload(url, name) { try { const res = await axios({ method: 'get', url, responseType: 'blob' }) const link = document.createElement('a') link.href = window.URL.createObjectURL(res.data) link.download = `${name}.zip` link.click() } catch (error) { console.error(`‘${name}’文件不存在或已删除!`) } } ~~~