发现问题
最近做公司项目,有个需求是要文件下载,需要鉴权的,get请求
以前 都是后端人员 给链接, 前端直接location.href = ${链接地址}
就可以了,我觉得这个也是大部分的下载方式,
现在需要get
的同时,需要在请求头里面添加token
字段, 这么做的话, 就需要做文件流的处理了
以上的location.href
是没办法在请求头携带token的, 这样的话, 文件就下载不了
以下,方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function getBlobFile(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.responseType = 'blob'; xhr.setRequestHeader('token', '你的token数据') xhr.onreadystatechange = () => { if(xhr.status === 200) { const blobUrl = window.URL.createObjectURL(xhr.response) resolve(blobUrl) } else { reject(new Error('请求失败')) } } }) }
|
而且在项目中也用到了iframe 鉴权, 也可以用这种方法, 获取到blobUrl
参考资料
- VUE+iframe添加请求头
- XMLHttpRequest, 设置返回体类型
- URL.createObjectURL()详解