vue下载文件流图片
我的开发情景是:点击下载-----向后台发出请求-----后台返回图片的文件流开发目标是:点击下载-----即可下载图片我的代码:axios({method: 'post',url: 'UCConfig/QRcode',data: {channel_user_id: row.channel_user_id,},responseType: 'blob'}).then(res => {const
·
- 我的开发情景是:点击下载-----向后台发出请求-----后台返回图片的文件流
- 开发目标是:点击下载-----即可下载图片
我的代码:
axios({
method: 'post',
url: 'UCConfig/QRcode',
data: {
channel_user_id: row.channel_user_id,
},
responseType: 'blob'
}).then(res => {
const blob = new Blob([res.data])
const fileName = 'qudaoerweima.jpg'
const dlink = document.createElement('a')
if ('download' in document.createElement('a')) { // 非IE下载
const dlink = document.createElement('a')
dlink.download = fileName
dlink.style.display = 'none'
dlink.href = URL.createObjectURL(blob)
document.body.appendChild(dlink)
dlink.click()
URL.revokeObjectURL(dlink.href) // 释放URL 对象
document.body.removeChild(dlink)
} else { // IE10+下载
navigator.msSaveBlob(blob, fileName)
}
});
提醒和解释:
responseType: 'blob'
是设置返回值为blob类型。res.data
指后台返回图片的文件流const fileName = 'qudaoerweima.jpg'
改变后缀名等于改变下载文件的后缀名,即把.jpg
换成.png
那么下载的就是.png
类型的图片,换成.pdf
,下载的就是pdf
文件。由此可以推断出,此种方法亦适合下载pdf
等其它文件流。dlink
是模拟a标签点击下载用的。- 百度时发现其他人有出现因为
mock.js
而不能正常下载的情况-----mockjs
初始化的时候给拦截响应设置了responseType:''
,所以可以尝试下屏蔽掉mockjs
。找到这行代码require('@/mock')
并注释,重启项目再进行测试。
mock模块会影响原生的ajax请求,使得服务器返回的blob类型变成乱码
额外扩展下vue使用 axios
请求后台接口的两种方式:
- 使用别名进行请求(
axios.get
或者axios.post
等)
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
- 通过向
axios
传递相关配置来创建请求
// 发送 POST 请求
axios({
method: 'post',
url: '/user/12345',
responseType: 'blob',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
});
更多推荐
已为社区贡献1条内容
所有评论(0)