需求:后端接口传过来一个字节流,前端通过浏览器下载到本地
接口响应内容 be like
实现:
html部分:
<!-- 设置一个按钮点击下载 -->
<el-button @click="download(id)"></el-button>
js部分:
// 伪代码
<script>
import axios from 'axios'
export default {
methods: {
// 下载
download(val) {
axios({
method: 'get',
url: 'j接口地址?参数=' + val,
responseType: 'blob' //重点!一定要设置responseType为blob
})
.then(res => {
//构造blob对象,type是文件类型,详情可以参阅blob文件类型
let blob = new Blob([res.data], { type: 'application/zip' }) //我是下载zip压缩包
let url = window.URL.createObjectURL(blob) //生成下载链接
const link = document.createElement('a') //创建超链接a用于文件下载
link.href = url //赋值下载路径
link.target = '_blank' //打开新窗口下载,不设置则为在本窗口下载
link.download = `${ '文件名' + val }.zip` //下载的文件名称(不设置就会随机生成)
link.click() //点击超链接触发下载
URL.revokeObjectURL(url) //释放URL
this.$message.success('下载完成')
})
.catch(error => this.$message.error('下载失败'))
}
}
}
附:blob接口文档