Axios前景概要:
1、可以使用自定义配置新建一个 axios 实例: axios.create([config])
var instance = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 1000,
headers: {
'X-Custom-Header': 'foobar'
auth: { // auth表示使用 HTTP 基础验证,并提供凭据
username: 'janedoe',
password: 's00pers3cret'
}
}
});
auth设置将覆写掉任意使用 headers
(axios.defaults.headers.xxx)设置的自定义 Authorization
头
2、为方便起见,axios为所有支持的请求方法提供了别名:
axios.get(url\[, config\])
axios.post(url\[, data\[, config\]\])
文件下载:
const ax = axios.create()
function download(url, params) {
ax.get({ // 通过Axios发起请求下载文件
methods: 'get',
url,
params,
responseType: 'blob' // 表示服务器响应的数据类型,可以是
//'arraybuffer', 'blob', 'document', 'json', 'text', 'stream',默认json
}).then({
const hd = resp.headers['content-disposition']
let fileName = 'download';
if (hd) {
const temp = hd.split(';')[1]
fileName = decodeURIComponent(temp.split('=')[1])
}
const resType = res.headers['Content-Type']
if (resType.indexOf('application/json') != -1) {
alert('后台返回的是JSON报错信息')
} else {
// 非IE下载
if ('download' in document.createElement('a')) {
let tagA = document.createElement('a')
tagA.href = window.URL.createObjectURL(res.data) // 获取当前文件的一个内存URL
tagA.download = filename // 下载后文件名
tagA.style.display = 'none'
document.body.appendChild(tagA)
tagA.click() // 点击下载
window.URL.revokeObjectURL(tagA.href) // 释放掉Blob对象
document.body.removeChilc(tagA) // 下载完成移除元素
} else {
// IE10+下载
window.navigator.msSaveBlob(res.data, fileName) // responseType: 'blob'指定了res.data为Blob对象
}
}
})
}
POST方式下载:
function download(url, params) {
ax.post(url, params, { responseType: 'blob' }).then(res => {
// 代码同上
})
}
预览PDF:
要在网页上显示PDF文件,首先< object >、< embed >、< iframe >这几个标签就能实现PDF文件的预览(无需JavaScript支持),例如:
<div style="height: 400px;">
<iframe :src="fileUrl" height="100%" width="100%" frameborder="0"></iframe>
</div>
fileUrl(预览文件url)来自文件下载时window.URL.createObjectURL(Blob)方法返回的url。
相关API
URL.createObjectURL(blob)和FileReader.readAsDataURL(file)很相似,
二者区别
- 通过URL.createObjectURL(blob)可以获取当前文件的一个内存URL,同步执行。
- 通过FileReader.readAsDataURL(file)可以获取一段data:base64的字符串, 异步执行。
内存使用
- createObjectURL返回一段带hash的url,并且一直存储在内存中,直到document触发了unload事件(例如:document close)或者执行revokeObjectURL来释放。
- FileReader.readAsDataURL则返回包含很多字符的base64,并会比blob url消耗更多内存,但是在不用的时候会自动从内存中清除(通过垃圾回收机制)
优劣对比:
- 使用createObjectURL可以节省性能并更快速,只不过需要在不使用的情况下手动释放内存
- 如果不太在意设备性能问题,并想获取图片的base64,则推荐使用FileReader.readAsDataURL
Blob, File, URL,FileReader对象说明
- Blob对象就是一个包含有只读原始数据的类文件对象,Blob对象可以看做是
存放二进制数据的容器,本身并不能操作二进制数据
。要读取里面的二进制数据,需要用FileReader。 - File是Blob的子类,比blob主要多出一个name的属性。
存放二进制数据的容器,本身并不能操作二进制数据
。 - URL对象用于生成指向File对象或Blob对象的URL,还可以使用base64字符串作为内容的DataURI将一个文件嵌入到文档里。
- FileReader对象就是
专门操作二进制数据的
,FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件。
window.URL对象可以为Blob对象生成一个网络地址,结合a标签的download属性,可以实现点击url下载文件。
通常情况下,File对象是来自用户在一个 <input>
元素上选择文件后返回的FileList对象,也可以是来自由拖放操作生成的 DataTransfer对象。拖放 API 的dataTransfer.files
返回的也是一个FileList 对象,它的成员因此也是 File 实例对象。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。