文档流下载

1、需求:有一个需求,需要调用接口来下载文件,然后后端传的是二进制文件流

2、思路:弄了很久,发现返回的数据始终是乱码,跟预期的不符,设置了responseType: 'blob'也设置了,但是还是返回的乱码,看请求头也有charset=utf-8,偏偏打开网页又是可以直接下载的,应该不是后端问题,面向百度编程很久后,总算发现问题所在,就是发现本应该传过去的responseType没有传到,导致没有返回blob,顺腾摸瓜发现是mock在拦截的时候会重置responseType,导致responseType没有传过去

3、解决:

禁用mock.js

// import '@/utils/mock.js'

重新调用接口,成功返回所需数据

 

 

 返回的文档流可以有几种下载方式

3-1、跳转路径来下载

window.open(res.request.responseURL)
或者
let url = res.request.responseURL
window.location.href=url

3-2、利用a标签的download属性来下载

                            var blob = new Blob([res.data], { type: 'application/zip' })
                            var url = window.URL.createObjectURL(blob)
                            var aLink = document.createElement('a')
                            aLink.style.display = 'none'
                            aLink.href = url
                            let disposition = res.headers['content-disposition'].split(';')
                            let FileName = disposition[1].split('=')[1]
                            aLink.download = FileName
                            document.body.appendChild(aLink)
                            aLink.click()
                            document.body.removeChild(aLink) 
                            window.URL.revokeObjectURL(url)

在处理blob时的type要根据所下载的类型来设置,类型url:https://blog.csdn.net/weixin_43299180/article/details/119818982

 

posted @ 2022-07-25 18:57  Pavetr  阅读(127)  评论(0)    收藏  举报