前端文件下载总结 3种方法2种数据类型 (a标签,window.open,blob文件对象下载)
后台-插件-广告管理-内容页头部广告(手机) |
1.直接使用a标签 ----下载文件(返回的是文件路径)
<a href="/export/文件1.xlsx" download>点击下载a> <a href="/export/文件1.xlsx" download="文件1.xlsx">点击下载a>- 1
- 2
如果后端返回的是文件路径,则直接可以用a标签
href — 对应的是文件路径
此时a标签 下载文件必须加上download 这一属性
如果需要命名 下载文件的名字 可以自定义download 的属性值 就是下载的文件名
a标签具体属性,查询:w3school
2.利用window.open/window.location 下载—绑定点击事件,代替a标签
<span class="pointer" @click="handlerDownload(path)">点击下载span>- 1
- 1
- 2
- 3
- 4
- 5
3.上面2种方法都是针对文件path打开下载,如果后端返回的blob 文件流对象,此时需要稍微处理下数据
(整个原理同a标签下载一样,只不过需要先利用js将转换blob文件对象转换成url,后js创建a标签,使其href属性值为之前转换过来的url,然后click这个a标签,完成下载后,移除该a标签)
(这里需要注意的是:一般情况后端返回的数据是json 格式,这里返回的是blob格式的,我们首先要确保请求封装请求文件时,要兼容responseType=‘blob’的情况,否则会导致收到的文件格式解析错误,乱码
如图)
3.1 确保请求的responseType=‘blob’,以下为利用axios封装的请求文件最后返回函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
3.2 !!!!记住在请求该blob文件时,请求参数最后传入blob
export const getExport = (params) => { return request('/export', 'post', params, 'blob') }- 1
- 2
- 3
3.3 获取到正确格式的blob 文件后如下图 ,就可以按上面思路写下载代码了
这是经过 request 请求转换的文件格式,并不是后端直接返回的源码(后端返回的无法直接看)
以下为下载处理代码,
URL.createObjectURL() :URL.createObjectURL()查询
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |