问题场景:
后台响应的直接是一个图片
需要注意的几点是:
- 对axios进行了二次封装的情况下面你应该对code==undefined的情况做单另的处理,因为很多情况下面我们封装的时候不是200会提示后台的错误
- 后台的传的图片是流的形式不是简单的图片的
- axios不是创建实例的方式(axios.create())进行的二次封装是会影响全局的,所以我们再这里import axios from "axios" 也是进过二次封装过的
解决方案:
*****tempalte里面*****
******methods:******
getImgCode() {
(this.uuid = new Date().getTime()),
axios({
url: this.GLOBAL.BASE_URL + "/common/yzm",
method: "post",
responseType: "blob", //画重点
data: this.$qs.stringify({
uuid: this.uuid,
}),
}).then((res) => {
//得到的res.data就是Blob对象
this.imageUrl = window.URL.createObjectURL(res.data); //画重点
});
},
盲区:
1.responseType值的类型可为如下
responseType:blob是用来请求文件流的,我们一般采用的是默认的text请求的是json数据
2.objectURL = URL.createObjectURL(object); 作用是用来创建url的
参数object是用于创建 URL 的 [File](https://developer.mozilla.org/zh-CN/docs/Web/API/File) 对象、[Blob](https://developer.mozilla.org/zh-CN/docs/Web/API/Blob) 对象或者 [MediaSource](https://developer.mozilla.org/zh-CN/docs/Web/API/MediaSource) 对象。
此篇文章仅为个人遇到的实际问题的总结。