vue实现接受后台文件流转文件并下载
接受到的文件流是这样的

1,首先在请求时加上 responseType:'blob'
request({ url: "url", method: "get", responseType:'blob', //加上这一行 params:params })
2,在获取到返回来的文件流后进行处理
//传的参数为图片
downloadImage({file_url:imgUrl}).then( res => {
//加上{type:"application/octet-stream;"}
let blob = new Blob([res],{type:"application/octet-stream;"})
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
//拆分图片地址保留文件名称及格式
link.setAttribute('download',this.splitStr(imgUrl));
document.body.appendChild(link);
link.click();
})
//只保留地址信息最后的文件名称及格式
splitStr(str){
return str.split('/')[str.split('/').length - 1]
},
3,如果是用的element-ui的图片预览下载,在功能栏位置增加下载按钮并实现下载,如下
html部分
<el-image
@click="clickImage(imgUrl)"
class="color-squre"
:src="imgUrl"
:preview-src-list="[imgUrl]"
fit="cover">
<div slot="error" class="image-slot-dvi">
无图片
</div>
</el-image>
js部分
//预览图添加下载按钮
clickImage(img){
this.$nextTick(() => {
let wrapper = document.getElementsByClassName(
'el-image-viewer__actions__inner'
)
//下载图标
let downImg = document.createElement('i')
downImg.setAttribute('class', 'el-icon-download')
wrapper[0].appendChild(downImg)
if (wrapper.length > 0) {
this.wrapperElem = wrapper[0]
//调用下载图片事件
this.downLoadFile()
}
})
},
downLoadFile() {
this.wrapperElem.addEventListener('click', (e) => {
let className = e.target.className
if (className === 'el-icon-download') {
let imgUrl = document.getElementsByClassName(
'el-image-viewer__canvas'
)[0].children[0].src
//下载接口
downloadImage({file_url:imgUrl}).then( res => {
let blob = new Blob([res],{type:"application/octet-stream;"})
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.setAttribute('download',this.splitStr(imgUrl));
document.body.appendChild(link);
link.click();
})
}
})
},

浙公网安备 33010602011771号